写点什么

Bean 的作用域与 Bean 的生命周期详解

  • 2022 年 5 月 08 日
  • 本文字数:1209 字

    阅读完需:约 4 分钟

配置文件 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;

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Bean的作用域与Bean的生命周期详解_Java_爱好编程进阶_InfoQ写作社区