• bean的初始化和销毁方法


    1、bean的生命周期:
      bean创建---初始化----销毁的过程
      容器管理bean的生命周期;
      我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法。
    2、指定初始化和销毁方法;
      通过@Bean指定init-method和destroy-method;
    初始化:对象创建完成之后,并赋值好调用初始化方法(单实例或者多实例);
    销毁方法:单实例:对象销毁或者容器关闭的时候调用该方法;
          多实例:容器不会管理这个bean,所以不会调用销毁方法。
    @Component
    public class Car {
        public Car(){
            System.out.println("car constructor...");
        }
        public void init(){
            System.out.println("car ... init...");
        }
        public void detory(){
            System.out.println("car ... detory...");
        }
    }

       在bean添加到容器中:

    @Configuration
    public class MainConfigOfLifeCycle {
        
        //@Scope("prototype")
        @Bean(initMethod="init",destroyMethod="detory")
        public Car car(){
            return new Car();
        }
    
    }

    3、通过让Bean实现InitializingBean(定义初始化逻辑)------afterPropertiesSet()方法,

                 DisposableBean(定义销毁逻辑)---destroy()方法;
    @Component
    public class Cat implements InitializingBean,DisposableBean {
        
        public Cat(){
            System.out.println("cat constructor...");
        }
        @Override
        public void destroy() throws Exception {
            // TODO Auto-generated method stub
            System.out.println("cat...destroy...");
        }
        @Override
        public void afterPropertiesSet() throws Exception {
            // TODO Auto-generated method stub
            System.out.println("cat...afterPropertiesSet...");
        }
    }

    4、可以使用JSR250;

      @PostConstruct:在bean创建完成并且属性赋值完成;来执行初始化方法

      @PreDestroy:在容器销毁bean之前通知我们进行清理工作

    @Component
    public class Dog {
        public Dog(){
            System.out.println("dog constructor...");
        }
        //对象创建并赋值之后调用
        @PostConstruct
        public void init(){
            System.out.println("Dog....@PostConstruct...");
        }
        //容器移除对象之前
        @PreDestroy
        public void detory(){
            System.out.println("Dog....@PreDestroy...");
        }
    }

    5、Spring为我们提供BeanPostProcessor,bean的后置处理器

    BeanPostProcessor【interface】:bean的后置处理器;
      在bean初始化前后进行一些处理工作;
      postProcessBeforeInitialization:在初始化之前工作
      postProcessAfterInitialization:在初始化之后工作
    /**
     * 后置处理器:初始化前后进行处理工作
     * 将后置处理器加入到容器中*/
    @Component
    public class MyBeanPostProcessor implements BeanPostProcessor {
    
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            // TODO Auto-generated method stub
            System.out.println("postProcessBeforeInitialization..."+beanName+"=>"+bean);
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            // TODO Auto-generated method stub
            System.out.println("postProcessAfterInitialization..."+beanName+"=>"+bean);
            return bean;
        }
    }
     
  • 相关阅读:
    codeforce842c Ilya And The Tree
    UVA11825 Hackers' Crackdown
    UVA10635 Prince and Princess
    hihocoder1327 分隔相同字符贪心
    2018 Multi-University Training Contest 3 1003 / hdu6321 Problem C. Dynamic Graph Matching 状压dp
    2018 Multi-University Training Contest 3 1001 / hdu6319 Problem A. Ascending Rating 单调队列,思维
    第十四届华中科技大学程序设计竞赛决赛同步赛
    The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple / ZOJ4027 Sequence Swapping dp递推
    gym101485G/BZOJ4430 Guessing Camels赌骆驼 树状数组或CDQ分治
    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 Clever King 最大权闭合子图
  • 原文地址:https://www.cnblogs.com/mayang2465/p/12092987.html
Copyright © 2020-2023  润新知