0%

SPRING5-BEAN的生命周期

测试方法如下:

1
2
3
4
5
@Test
public void test2() {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“ApplicationContext.xml”);
beanService beanService= (com.bean.service2.beanService) applicationContext.getBean(“beanService”);
}

1.调用无参的构造器,创建实例对象。

1
2
3
4
5
6
public class beanServiceImpl implements beanService{
public beanServiceImpl() {
super();
System.out.println(“1:初始化完成”);
}
}

2.调用参数的setter,为属性注入值。

1
2
3
<bean id=“beanService” class=“com.bean.service2.beanServiceImpl”>
<property name=“dao” value=“aaa”></property>
</bean>
1
2
3
4
5
private String dao;
public void setDao(String dao) {
this.dao = dao;
System.out.println(“2:set属性方法”);
}

3.若bean实现了beanNameAware接口,则会执行接口方法setBeanName(String beanId),使bean类可以获取其在容器中的id名称。

1
public class beanServiceImpl implements beanService,BeanNameAware

继承了BeanNameAware的默认方法

1
2
3
4
public void setBeanName(String name) {
// TODO Auto-generated method stub
System.out.println(“3:BeanNameAware的setBeanName,其中实现了接口名:”+name);
}

4.若bean实现了beanFactoryAware接口,则会执行接口方法setBeanFactory(BeanFactrory factory),使bean类可以获取到beanFactory对象。

1
public class beanServiceImpl implements beanService,BeanNameAware,BeanFactoryAware

继承了BeanFactoryAware的默认方法

1
2
3
4
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
// TODO Auto-generated method stub
System.out.println(“4:获取到beanFactory的容器”);
}

5.若定义并注册了bean后处理器beanpostProcessor,则执行接口方法postProcessBeforeInitialization();

创建beanpostprocessor实现BeanPostProcessor

1
2
3
4
5
6
public class beanpostprocessor implements BeanPostProcessor{
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println(“5:获取到BeanPostProcessor的beafore方法”);
return null;
}
}

6.若bean实现initializingBean接口,则执行接口方法afterPropertiesSet().该方法在bean的所有属性的set方法执行完毕后执行,是bean初始化的标志,实例化结束。

1
2
3
4
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
System.out.println(“6:初始化结束”);
}

7.若设置了init-method方法,则执行。

1
2
3
<bean id=“beanService2” class=“com.bean.service2.beanServiceImpl” init-method=“doAfter”>
<property name=“dao” value=“aaa”></property>
</bean>

8若定义并注册了bean后处理器beanpostProcessor,则执行接口方法postProcessAfterInitialization();

1
2
3
4
5
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// TODO Auto-generated method stub
System.out.println(“8:获取到BeanPostProcessor的After方法”);
return bean;
}

9.执行业务方法。

1
2
3
4
public void dotest();
public void dotest() {
System.out.println(“9:主方法”);
}

10.若bean实现了DisposableBean接口,则执行接口方法destroy().

1
2
3
4
public void destroy() throws Exception {
// TODO Auto-generated method stub
System.out.println(“10:准备进行销毁工作”);
}

11.若设置了destrory-method方法,则执行。

1
2
3
4
5
6
7
<bean id=“beanService2” class=“com.bean.service2.beanServiceImpl” init-method=“doAfter” destroy-method=“doDestroy”>
<property name=“dao” value=“aaa”></property>
</bean>
public void doDestroy() throws Exception {
// TODO Auto-generated method stub
System.out.println(“11:进行销毁工作”);
}