目录
Spring配置文件
Bean标签基本配置
用于配置对象交由Spring来创建
默认情况下他调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。
基本属性:
id:Bean实例在Spring容器中的唯一标识
class:Bean的限定名称
Bean标签范围配置
scope:指对象的作用范围,取值如下:
取值范围 | 说明 |
singleton | 默认值,单例的 |
prototype | 多例的 |
request | WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中 |
session | WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中 |
global session | WEB项目中,应用在Portlet环境,如果没有Porlet环境那么globalSession相当于session |
下pom.xml中配置junit的坐标
1 |
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> |
在test模块下创建text类
1 |
package com; import com.Dao.UserDao; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class text { @Test public void text1(){ ApplicationContext app =new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao1 = (UserDao) app.getBean("userDao"); UserDao userDao2 = (UserDao) app.getBean("userDao"); System.out.println(userDao1); System.out.println(userDao2); } } |
使用singleton打印出来的地址一致说明容器中只有一份
使用prototype打印出来的地址不一致说明容器中有多份
无参构造创建时机
1)当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
- 对象创建:当应用加载,创建容器时,对象就被创建了
- 对象运行:只要容器在,对象一直活着
- 对象销毁:当应用卸载,销毁容器时,对象就被销毁了
2)当scope取值为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期
- 对象创建:当使用对象时,创建新的对象实例
- 对象运行:只要对象在使用中,就一直活着
- 对象销毁:当对象长时间不用时,被Java的垃圾回收器回收了
Bean生命周期配置
init-method:指定类中的初始化方法名称
destory-method:指定类中的销毁方法名称
在UserDaoImp类下
创建的初始化方法init和销毁方法destory(名字为任意的)
1 |
public class UserDaoImpl implements UserDao { public void play(){ System.out.println("play and play..."); } public UserDaoImpl(){ System.out.println("UserDaoImpl被创建"); } public void init(){ System.out.println("初始化方法"); } public void destory(){ System.out.println("销毁方法"); } } |
在applicationContext.xml文件中指定初始化和销毁方法
1 |
<bean id="userDao" class="com.Dao.impl.UserDaoImpl" init-method="init" destroy-method="destory" ></bean> |
在UserDemo方法运行结果:
Bean实例化三种方式
无参构造方法实例化
工厂静态方法实例化
工厂实例方法实例化
①:工厂静态方法实例化
创建一个factory包下
1 |
package com.factory; import com.Dao.UserDao; import com.Dao.impl.UserDaoImpl; public class StaticFactory { public static UserDao getUserDao(){ return new UserDaoImpl(); } } |
xml中配置:
1 |
<bean id="userDao" class="com.factory.StaticFactory" factory-method="getUserDao"></bean> |
在userDemo下运行,或者在test运行也可
② 工厂实例方法实例化演示
创建一个DynamicFactory类
1 |
import com.Dao.UserDao; import com.Dao.impl.UserDaoImpl; public class DynamicFactory { public UserDao getUserDao(){ return new UserDaoImpl(); } } |
在applicationContext.xml中
1 |
<bean id="factory" class="com.factory.DynamicFactory" ></bean> <bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean> <!--第一bean表示创建工厂对象,第二个表示从factory容器获得getUserDao方法获得对象--> |
其余代码不变,在text下运行得