栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA Spring IOC Bean的作用域与生命周期演示

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA Spring IOC Bean的作用域与生命周期演示

文章目录
        • Bean的作用域:
          • 如何设置单实例与多实例对象:
        • Bean的生命周期
          • Bean的生命周期:
          • 演示Bean的生命周期
          • 源码
          • bean的后置处理器,更加详细的步骤(多加两步,一共七步)
          • 演示bean的后置处理器

Bean的作用域:

设置创建bean单实例还是多实例,默认是单实例对象。

// 演示是否是单实例,如果是单实例对象则输出两个对象的地址是相同的。
@Test
public void testCollection2(){
    ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
    Book book1 = context.getBean("book", Book.class);
    Book book2 = context.getBean("book", Book.class);
    System.out.println(book1);
    System.out.println(book2);

}



如何设置单实例与多实例对象:
  1. 在spring 配置文件中bean标签里面的 scope属性用于设置单实例和多实例。
  2. scope属性值
    1. singleton :默认值,表示单实例对象
    2. prototype:表示多实例对象

当我们把bean标签中的scope属性设置为prototype多实例后,再次输出。

 

Bean的生命周期

生命周期:就是从对象到销毁的过程

Bean的生命周期:
  1. 通过构造器创建bean实例(无参构造)
  2. 为bean的属性设置值和对其它bean的引用(调用set方法)
  3. 调用bean里面的初始化方法(需要进行配置)
  4. 获取创建的bean对象(bean可以使用了)
  5. 当容器关闭的时候,调用bean销毁的方法(需要配置销毁的方法)
演示Bean的生命周期
  1. 通过构造器创建bean实例(无参构造)
    // 无参构造
    public Orders(){
        System.out.println("第一步:通过构造器创建bean实例(无参构造)");
}
  1. 为bean的属性设置值和对其它bean的引用(调用set方法)
    public void setOname(String oname) {
        this.oname = oname;
        System.out.println("第二步:为bean的属性设置值和对其它bean的引用(调用set方法)");
    }
  1. 调用bean里面的初始化方法(需要在bean中进行配置)
    // 创建执行的初始化方法,本身不会执行,需要配置
    public void initMethod(){
        System.out.println("第三步:执行初始化的方法");
    }

  bean的初始化方法配置:

  1. bean可以使用了(获取创建的bean对象)
    @Test
    public void testCollection3(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean4.xml");
        Orders orders = context.getBean("orders", Orders.class);
        System.out.println("第四步:获取创建的bean对象");
        System.out.println(orders);
    }
  1. 当容器关闭的时候,调用bean销毁的方法(需要配置销毁的方法)
    //创建可以执行的销毁的方法
    public void destroyMethod(){
        System.out.println("第五步:调用bean销毁的方法");
    }

  bean销毁配置:

 最后在Test测试方法中手动添加销毁

        //手动让bean实例销毁
        context.close();
    }

源码

bean.xml

    
        
    

order类

package com.wpc.spring5.collection.bean;

public class Orders {

    // 无参构造
    public Orders(){
        System.out.println("第一步:通过构造器创建bean实例(无参构造)");
    }
    private String oname;

    public void setOname(String oname) {
        this.oname = oname;
        System.out.println("第二步:为bean的属性设置值和对其它bean的引用(调用set方法)");
    }

    // 创建执行的初始化方法,本身不会执行,需要配置
    public void initMethod(){
        System.out.println("第三步:执行初始化的方法");
    }

    //创建可以执行的销毁的方法
    public void destroyMethod(){
        System.out.println("第五步:调用bean销毁的方法");
    }
}


Test类,测试输出

    @Test
    public void testCollection3(){
      //  ApplicationContext context = new ClassPathXmlApplicationContext("bean4.xml");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean4.xml");
        Orders orders = context.getBean("orders", Orders.class);
        System.out.println("第四步:获取创建的bean对象");
        System.out.println(orders);

        //手动让bean实例销毁,这个方法会执行销毁方法
        context.close();
    }


 

bean的后置处理器,更加详细的步骤(多加两步,一共七步)
  1. 通过构造器创建bean实例(无参构造)
  2. 为bean的属性设置值和对其它bean的引用(调用set方法)
  3. 把bean的实例传递给bean的后置处理器(执行postProcessBeforeInitialization方法)
  4. 调用bean里面的初始化方法(需要进行配置)
  5. 把bean的实例传递给bean的后置处理器(执行postProcessAfterInitialization方法)
  6. 获取创建的bean对象(bean可以使用了)
  7. 当容器关闭的时候,调用bean销毁的方法(需要配置销毁的方法)

演示bean的后置处理器

 第一步:创建类,实现接口BeanProcessor,创建一个后置处理器

// 创建MybeanPost类,并实现BeanPostProcessor接口
public class MybeanPost implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("初始化之前执行的方法");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("初始化之后执行的方法");
        return bean;
    }
}


 第二步:在bean中对后置处理器进行配置。由于MybeanPost类中实现了BeanPostProcessor接口,所以bean会自动视MybeanPost类为后置处理器。

    
        
    


    



                
                
                
        
        

  
    
      
        
      
      
        
          
          
        
        
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006098.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号