Bean 的作用域与 Bean 的生命周期详解
配置文件 beans5.xml
<bean id="cat" scope="singleton" class="com.jd.dao.Cat">
<property name="name" value="大橘"></property>
</bean>
测试:
//Bean 的作用域测试方法
@Test
public void catTest(){
//1.初始化Spring容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans5.xml");
//2.通过Spring容器获取Bean的实例
Cat cat1 = (Cat) applicationContext.getBean("cat");
Cat cat2 = (Cat) applicationContext.getBean("cat");
//3.输出获取的实例
System.out.println(cat1);
System.out.println(cat2);
}
prototype 作用域:
将配置文件 beans5.xml
?中的 scope 属性改为 prototype
?,再次运行测试:
<bean id="cat" scope="prototype" class="com.jd.dao.Cat">
<property name="name" value="大橘"></property>
</bean>
测试:
二、Bean 的生命周期
Bean 从创建到销毁称为 Bean 的生命周期,大体上 Bean 的生命周期共有七步:
(1)通过无参构造器创建 bean 实例
(2)调用属性 setter 方法为 bean 的属性设置值
(3)把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization
(4)调用 bean 的初始化的方法(需要配置初始化的方法)
(5)把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization
(6)获取使用已经创建的 bean
(7)当容器关闭时候,调用 bean 的销毁的方法(需要配置销毁的方法)
注意:
① 初始化方法、销毁方法都需要在 Bean 中作为属性手动配置;
② 只有 singleton 作用域的 Bean 才会执行销毁方 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 法;
使用代码演示 Bean 的生命周期
(1)普通 Java Bean: Cat.java
public class Cat {
private String name;
public void setName(String name) {
this.name = name;
System.out.println("第二步:调用属性setter方法为bean的属性设置值");
}
public Cat(){
System.out.println("第一步;通过无参构造器创建bean实例");
}
//初始化方法(在配置文件中配置实现调用)
public void initMethod(){
System.out.println("第四步:调用bean的初始化的方法");
}
//销毁方法(在配置文件中配置实现调用)
public void destroyMethod(){
System.out.println("第七步:当容器关闭时候,调用bean的销毁的方法");
}
}
(2)myBeanPostProcessor 实现 BeanPostProcessor 接口,实现后置处理器: myBeanPostProcessor.java
?
(spring 中的 AOP 就是通过实现 BeanPostProcessor 接口实现的)
//myBeanPostProcessor 实现 BeanPostProcessor 接口,实现后置处理器
public class myBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("第三步:把bean实例传递bean后置处理器的方法");
return bean;
评论