• ICO操作Bean管理的(bean的作用域和生命周期)


    目录

    bean的作用域

    如何证明是单实例还是多实例?

    如何设置成单实例还是多实例?

    scope 属性值

    singleton 和 prototype 区别

    bean的生命周期

    演示bean的生命周期

    bean的后置处理器,七步!


    bean的作用域

    在Spring里面,设置创建bean实例是单实例还是多实例

    如何证明是单实例还是多实例?


    在类里面多次获取然后输出,看输出的地址,地址相同单实例,地址不同就是多实例

    1. @Test
    2. public void testCollection2(){
    3. ApplicationContext context =
    4. new ClassPathXmlApplicationContext("bean2.xml");
    5. Book book1 = context.getBean("book", Book.class);
    6. Book book2 = context.getBean("book", Book.class);
    7. System.out.println(book1);
    8. System.out.println(book2);
    9. }

    在控制台输出,从下图可以看出是默认是单实例对象,同时我们也可以设置为多实例对象。

    如何设置成单实例还是多实例?

    spring配置文件bean标签里面有属性(scope)用于设置单实例还是多实例。

    scope 属性值

    第一个值 默认值,singleton 表示单实例对象

    第二个值prototype ,表示多实例对象

    xml 文件。测试方法和上面一样,run 查看控制台,如下图可知,地址不同,得出设置成多实例对象了。

    1. <bean id="book" class="com.atguigu.spring5.collectiontype.Book" scope="prototype">
    2. <property name="list" ref="booklist">property>
    3. bean>

    singleton 和 prototype 区别

    第一 singleton 单实例 ,prototype 多实例

    第二 设置scope值是singleton 的时候,加载spring配置文件时候就会创建单实例对象;设置scope值是prototype,不是在加载spring配置文件的时候创建对象,而是在调用getBean方法时候创建多实例对象

    bean的生命周期

    生命周期:从对象创建到对象销毁的过程。

    1.  通过构造器创建bean实例(无参数构造);
    2. 为bean的属性设置值和其他bean引用(调用set 方法);
    3. 调用bean的初始化的方法(需要进行配置初始化的方法);
    4. bean 可以使用了(对象获取到了);
    5. 当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

    演示bean的生命周期

    基本结构:

    1. <bean id="orders" class="com.atguigu.spring5.bean.Orders">
    2. <property name="oname" value="地方">property>
    3. bean>
    1. public class Orders {
    2. private String oname;
    3. public void setOname(String oname) {
    4. this.oname = oname;
    5. }
    6. }

       通过构造器创建bean实例(无参数构造):

    1. public class Orders {
    2. //无参数构造
    3. public Orders() {
    4. System.out.println("第一步 执行无参数构造创建bean实例 ");
    5. }
    6. private String oname;
    7. // 为bean的属性设置值
    8. public void setOname(String oname) {
    9. this.oname = oname;
    10. System.out.println("第二步 调用set 方法设置属性值");
    11. }
    12. //创建执行的初始化的方法
    13. public void initMethod(){
    14. System.out.println("第三步 执行初始化的方法");
    15. }
    16. //创建执行的初始化的方法
    17. public void destroyMethod(){
    18. System.out.println("第五步 执行销毁的方法");
    19. }
    20. }
    1. @Test
    2. public void testBean3(){
    3. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean4.xml");
    4. Orders orders = context.getBean("orders", Orders.class);
    5. System.out.println("第四步 获取创建bean实例对象");
    6. System.out.println(orders);
    7. //手动让bean实例销毁
    8. context.close();
    9. }

    bean的后置处理器,七步!

    1.  通过构造器创建bean实例(无参数构造);
    2. 为bean的属性设置值和其他bean引用(调用set 方法);
    3. 把bean实例传递bean后置处理器的方法:postProcessBeforeInitialization
    4. 调用bean的初始化的方法(需要进行配置初始化的方法);
    5. 把bean实例传递bean后置处理器的方法:postProcessAfterInitialization
    6. bean 可以使用了(对象获取到了);
    7. 当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

    演示添加后置处理器效果

    1. public class MyBatisPost implements BeanPostProcessor {
    2. @Override
    3. public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    4. System.out.println("在初始化之前执行的方法");
    5. return bean;
    6. }
    7. @Override
    8. public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    9. System.out.println("在初始化之后执行的方法");
    10. return bean;
    11. }
    12. }
    1. <bean id="myBeanPost" class="com.atguigu.spring5.bean.MyBatisPost">bean>

     

  • 相关阅读:
    产品经理常用工具汇总
    Oracle安装 - shmmax和shmall设置
    vue3 - ref和reactive的区别
    JAVA【数据库事务】【MySQL】
    心肺运动试验----各类参数分析笔记
    安装Linux虚拟机并在Llinux中安装Redis、MySQL
    在linux系统上看全世界新闻 -- Clinews的使用详解
    MindFusion JavaScript R2 套件 Crack
    计算机毕业设计(附源码)python语言学习系统
    一文带你解决Ajax!
  • 原文地址:https://blog.csdn.net/m0_57448314/article/details/128120414