溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java?Spring?Bean生命周期管理的示例分析

發(fā)布時(shí)間:2022-03-04 10:41:26 來源:億速云 閱讀:173 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Java Spring Bean生命周期管理的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    Spring Bean的生命周期管理

    一、Spring Bean的生命周期

    Java?Spring?Bean生命周期管理的示例分析

    通過以下方式來指定Bean的初始化和銷毀方法,
    當(dāng)Bean為單例時(shí),Bean歸Spring容器管理,Spring容器關(guān)閉,就會(huì)調(diào)用Bean的銷毀方法
    當(dāng)Bean為多例時(shí),Bean不歸Spring容器管理,Spring容器關(guān)閉,不會(huì)調(diào)用Bean的銷毀方法

    二、通過@Bean的參數(shù)(initMethod ,destroyMethod)指定Bean的初始化和銷毀方法

    1、項(xiàng)目結(jié)構(gòu)

    Java?Spring?Bean生命周期管理的示例分析

    2、Person
    public class Person {
        public Person(){
            System.out.println("Person 創(chuàng)建了...");
        }
        public void init(){
            System.out.println("Person 初始化了...");
        }
        public void destroy(){
            System.out.println("Person 被銷毀了...");
        }
    }
    3、Bean注冊配置類(單實(shí)例)
    import com.dashu.bean.Person;
    import org.springframework.context.annotation.*;
    @Configuration
    public class BeanConfig {
        @Bean(initMethod = "init",destroyMethod = "destroy")
        public Person person(){
            return new Person();
        }
    }
    4、測試類
    import com.dashu.bean.Person;
    import com.dashu.config.BeanConfig;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    public class Main {
        public static void main(String[] args) {
            //加載配置類獲取容器
            AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
            //獲取Bean
            Person bean = annotationConfigApplicationContext.getBean(Person.class);
            //關(guān)閉容器
            annotationConfigApplicationContext.close();
        }
    }
    5、測試結(jié)果

    Java?Spring?Bean生命周期管理的示例分析

    6、Bean注冊配置類(多實(shí)例)
    import com.dashu.bean.Person;
    import org.springframework.context.annotation.*;
    @Configuration
    public class BeanConfig {
        @Scope("prototype")
        @Bean(initMethod = "init",destroyMethod = "destroy")
        public Person person(){
            return new Person();
        }
    }
    7、測試結(jié)果

    Java?Spring?Bean生命周期管理的示例分析

    三、Bean實(shí)現(xiàn)接口InitializingBean, DisposableBean

    1、Person
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.beans.factory.InitializingBean;
    public class Person implements InitializingBean, DisposableBean {
        public Person(){
            System.out.println("Person 創(chuàng)建了...");
        }
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("Person 初始化了...");
        }
        @Override
        public void destroy() throws Exception {
            System.out.println("Person 被銷毀了...");
        }
    }
    2、Bean注冊配置類
    import com.dashu.bean.Person;
    import org.springframework.context.annotation.*;
    @Configuration
    public class BeanConfig {
        @Bean
        public Person person(){
            return new Person();
        }
    }
    3、測試結(jié)果

    Java?Spring?Bean生命周期管理的示例分析

    四、通過注解@PostConstruct和@PreDestroy

    @PostConstruct:標(biāo)注在Bean的初始化方法上
    @PreDestroy:標(biāo)注在Bean的銷毀方法上
    1、Person
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    public class Person {
        public Person(){
            System.out.println("Person 創(chuàng)建了...");
        }
        @PostConstruct
        public void init(){
            System.out.println("Person 初始化了...");
        }
        @PreDestroy
        public void destroy(){
            System.out.println("Person 被銷毀了...");
        }
    }
    2、測試結(jié)果

    Java?Spring?Bean生命周期管理的示例分析

    五、使用接口BeanPostProcessor實(shí)現(xiàn)類(后置處理器)

    1、項(xiàng)目結(jié)構(gòu)

    Java?Spring?Bean生命周期管理的示例分析

    2、Person
    import org.springframework.stereotype.Component;
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    @Component
    public class Person {
        public Person(){
            System.out.println("Person 創(chuàng)建了...");
        }
        @PostConstruct
        public void init(){
            System.out.println("Person 初始化了...");
        }
        @PreDestroy
        public void destroy(){
            System.out.println("Person 被銷毀了...");
        }
    }
    3、Bean注冊配置類
    import org.springframework.context.annotation.*;
    @Configuration
    @ComponentScan({"com.dashu"})
    public class BeanConfig {
    }
    4、BeanPostProcessor實(shí)現(xiàn)類(后置處理器)
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanPostProcessor;
    import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor;
    import org.springframework.lang.Nullable;
    import org.springframework.stereotype.Component;
    /**
     * 后置處理器:初始化前后進(jìn)行處理工作
     */
    @Component
    public class MyBeanPostProcessor implements BeanPostProcessor {
        /**
         * 初始化之前工作
         * @param bean
         * @param beanName
         * @return
         * @throws BeansException
         */
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("初始化之前..."+beanName+"=["+bean+"]");
            return bean;
        }
        /**
         * 初始化之后工作
         * @param bean
         * @param beanName
         * @return
         * @throws BeansException
         */
        @Override
        public  Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("初始化之后..."+beanName+"=["+bean+"]");
            return bean;
        }
    }
    5、測試結(jié)果

    Java?Spring?Bean生命周期管理的示例分析

    看完了這篇文章,相信你對“Java Spring Bean生命周期管理的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI