zoukankan      html  css  js  c++  java
  • Spring:Bean的生命周期

    * bean的生命周期
    *         bean创建--初始化--销毁过程
    *  我们可以自定义初始化和销毁方法:
    对象创建:
    	单实例:容器启动的时候创建对象
    	多实例:每次获取的时候创建对象
    初始化:对象创建完成,并赋值好,调用初始化方法
    销毁:
    	单实例:容器关闭的时候销毁
    	多实例:容器不会管理这个bean,不会调用销毁方法
    

    initMethod和destroyMethod

    public class Car {
        public Car(){
            System.out.println("car constructor....");
        }
    
        public void init(){
            Sys	tem.out.println("car .... init....");
        }
    
        public void carDestroy(){
            System.out.println("car ... destroy....");
        }
    }
    
        @Bean(initMethod = "init", destroyMethod = "carDestroy")
        public Car car(){
            return new Car();
        }
    

    测试:

        @Test
        public void test01(){
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
            System.out.println("容器创建完成");
            //applicationContext.getBean(Car.class);
            applicationContext.close();
        }
    

    image-20201218091530081

    InitializingBean和DisposableBean

    InitializingBean:bean创建完成,属性赋值完成后

    DisposableBean定义销毁逻辑

    public class Car implements InitializingBean,DisposableBean {
        public Car(){
            System.out.println("car constructor....");
        }
    
        public void init(){
            System.out.println("car .... init....");
        }
    
        public void carDestroy(){
            System.out.println("car...carDestroy....");
        }
        
        @Override
        public void destroy(){
            System.out.println("car ... destroy....");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("car...afterPropertiesSet.....");
        }
    }
    

    image-20201222145012341

    @PostConstruct和@PreDestroy

    JSR250

    public class Car implements InitializingBean,DisposableBean {
        public Car(){
            System.out.println("car constructor....");
        }
    
        @PostConstruct
        public void post(){
            System.out.println("PostConstruct");
        }
    
       @PreDestroy
        public void pre(){
            System.out.println("PreDestroy");
        }
    
        public void init(){
            System.out.println("car .... init....");
        }
    
        public void carDestroy(){
            System.out.println("car...carDestroy....");
        }
    
        @Override
        public void destroy(){
            System.out.println("car ... destroy....");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("car...afterPropertiesSet.....");
        }
    }
    

    image-20201222145238047

    BeanPostProcessor

    BeanPostProcessor[interface]:bean的后置处理器

    在bean初始化前后进行一些处理工作

    postProcessBeforeInitialization:在bean创建之后,初始化方法之前

    postProcessAfterInitialization:在bean创建之后,初始化方法之后

    public class MyBeanPostProcessor implements BeanPostProcessor {
    
        /**
         * @param bean 创建的实例
         * @param beanName bean的名字
         */
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessBeforeInitialization......"+beanName+"...."+bean);
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("postProcessAfterInitialization......"+beanName+"...."+bean);
            return bean;
        }
    }
    

    执行结果:

    image-20201222152256582

    源码:AbstractAutowireCapableBeanFactory

    image-20201222165857891

  • 相关阅读:
    在每个类声明之后、每个函数定义结束之后都要加空行。
    不提倡使用全局变量
    头文件中只存放“声明”而不存放“定义”
    用 #include “filename.h” 格式来引用非标准库的头文件
    用 #include <filename.h> 格式来引用标准库的头文件
    为了防止头文件被重复引用
    java Excel导入、自适应版本、将Excel转成List<map>对象
    selenium用java找到表格某一行某一列中含有特定文字的某个元素
    关于java中创建文件,并且写入内容
    java把一个文件的内容复制到另外一个文件
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14174149.html
Copyright © 2011-2022 走看看