1.Bean的作用域
在Spring中可以通过配置bean标签的scope属性来指定bean的作用域范围
<bean id ="user" class="com.bean.User" scope="prototype"></bean>
singleton:每次从ioc容器中获取到bean所对应的对象都是同一个
prototype:每次获取到的对象都不一样。在getBean()时创建对象。
2. Bean的生命周期
当scope="singleton"
时前三个生命周期在获取IOC容器时就执行,并不是在获取bean时来才执行。
当scope="prototype"
时前三个生命周期是在获取bean时来才执行,但销毁的方法不由ioc容器来管理。(每个创建的对象都不一样了)
(1)实例化,创建对象
IOC管理对象时是通过工厂模式和反射机制来创建对象,默认使用无参构造。
(2)依赖注入
为当前的属性赋值。
(3)初始化
在bean标签中设置 init-method来指定
<bean id="user" class="com.bean.User" init-method="initMethod" destory-method="destoryMethod">
(4)销毁(在IOC容器关闭时候销毁)
在测试中用 ClassPathXmlApplicationContext,使用.close()。
在bean标签中设置 init-method来指定
<bean id="user" class="com.bean.User" init-method="initMethod" destory-method="destoryMethod">
bean的后置处理器会在生命周期的初始化前后添加额外的操作,需要实现BeanPostProcessor接口,且配置到IOC容器中,需要注意的是,bean后置处理器不是单独针对某一个bean生效,而是针对IOC容器中所有bean都会执行。
3. FactoryBean
bean工厂是ioc最基本的实现,作用是帮助我们管理bean,但factorybean是一个bean,需要交给ioc容器来管理。
FactoryBean是Spring提供的一种整合第三方框架的常用机制。
和普通的bean不同,配置一个FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中配置的这个类的对象,而是getObject()方法的返回值。
通过这种机制,Spring可以帮我们把复杂组件创建的详细过程和繁琐细节都屏蔽起来,只把最简洁的使用界面展示给我们。
FactoryBean是一个接口,需要创建一个类实现该接口
其中有三个方法:
* getObject():通过一个对象交给IOC容器管理
* getObjectType():设置所提供对象的类型
* isSingleton():所提供的对象是否单例
当把FactoryBean的实现类配置为bean时,会将当前类中getObject()所返回的对象交给IOC容器管理
创建类UserFactoryBean
public class UserFactoryBean implements FactoryBean<User> {
@Override
public User getObject() throws Exception {
return new User();
}
@Override
public Class<?> getObjectType() {
return User.class;
}
}
配置bean
<bean class="com.bean.UserFactoryBean"></bean>
测试
@Test
public void testUserFactoryBean(){
//获取IOC容器
ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-factorybean.xml");
User user = ioc.getBean(User.class);
System.out.println(user);
}
当把FactoryBean以一个bean的方式来配置时,把它所提供的对象(getObject()方法返回的对象)交给IOC容器管理。
标签:容器,对象,ioc,bean,Bean,FactoryBean,IOC From: https://www.cnblogs.com/Joyce-mi7/p/16741605.html