美文网首页
初始化和销毁方法

初始化和销毁方法

作者: 宿命99 | 来源:发表于2018-04-28 15:28 被阅读19次

    @Bean(initMethod="init", destoryMethod="destroy")

    实现接口 InitializingBean 初始化方法, DisposableBean 接口的销毁方法

    使用 JSR-205 规范中的注解 @PostConstruct 指定初始化方法, @PreDestroy 指定销毁方法

    BeanPostProcessor 接口, Bean 的后置处理器

    postProcessBeforeInitialization:在任何初始化之前,此方法会运行在 initMethod 之前。postProcessAfterInitialization:在任何初始化之后,此方法会运行在 initMethod 之后 。

    销毁方法


    @Bean 方式已经在 @Bean 注解章中说过了


    实现接口的方式
    Student 类

    public class Student implements InitializingBean, DisposableBean {
    
        public Student() {
            System.out.println(" 构造器方法............");
        }
    
        @Override
        public void destroy() throws Exception {
            System.out.println("销毁方法.................");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("初始化方法...................");
        }
    }
    

    配置类

    @Configuration
    public class InitAndDestroyMethod {
    
        @Bean
        public Student student() {
            return new Student();
        }
    
    }
    

    测试代码

        @Test
        public void test9() {
            ApplicationContext ctx = new AnnotationConfigApplicationContext(InitAndDestroyMethod.class);
            Student bean = ctx.getBean(Student.class);
            System.out.println(bean.getClass());
        }
    

    结果


    初始化方法执行成功

    没有执行销毁方法,是因为没有关闭容器,显示的调用一次关闭容器的方法

        @Test
        public void test9() {
            ApplicationContext ctx = new AnnotationConfigApplicationContext(InitAndDestroyMethod.class);
            Student bean = ctx.getBean(Student.class);
            System.out.println(bean.getClass());
            ((AnnotationConfigApplicationContext)ctx).close();
        }
    

    再看执行结果


    销毁方法也成功执行

    JSR 250 注解 @PostContruct 和 @PreDestroy

    改造 Student 类,不实现接口

    public class Student {
    
        public Student() {
            System.out.println("Student 构造器方法............");
        }
    
        @PreDestroy
        public void destroy() throws Exception {
            System.out.println("Student 销毁方法.................");
        }
    
        @PostConstruct
        public void init() throws Exception {
            System.out.println("Student 初始化方法...................");
        }
    }
    

    配置类不做改动
    测试代码不做改动
    结果


    执行成功

    会执行标注了注解的初始化方法和销毁方法


    BeanPostProcessor 接口

    该接口有两个方法,都只是针对初始化的。
    改造 Student 类

    public class Student implements BeanPostProcessor {
    
        public Student() {
            System.out.println("Student 构造器方法............");
        }
    
        @PreDestroy
        public void destroy() throws Exception {
            System.out.println("Student 销毁方法.................");
        }
    
        @PostConstruct
        public void init() throws Exception {
            System.out.println("Student 初始化方法...................");
        }
    
        @Override
        public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
            System.out.println(" postProcessBeforeInitialization 在初始化方法执行之前 执行........................");
            return o;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
            System.out.println(" postProcessAfterInitialization 在初始化方法执行之后 执行........................");
            return o;
        }
    }
    

    配置类不做改动
    测试代码不做改动
    结果


    成功执行

    相关文章

      网友评论

          本文标题:初始化和销毁方法

          本文链接:https://www.haomeiwen.com/subject/hdwwcftx.html