中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間:2022-03-04 10:41:26 來源:億速云 閱讀:179 作者:小新 欄目:開發技術

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

    Spring Bean的生命周期管理

    一、Spring Bean的生命周期

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

    通過以下方式來指定Bean的初始化和銷毀方法,
    當Bean為單例時,Bean歸Spring容器管理,Spring容器關閉,就會調用Bean的銷毀方法
    當Bean為多例時,Bean不歸Spring容器管理,Spring容器關閉,不會調用Bean的銷毀方法

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

    1、項目結構

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

    2、Person
    public class Person {
        public Person(){
            System.out.println("Person 創建了...");
        }
        public void init(){
            System.out.println("Person 初始化了...");
        }
        public void destroy(){
            System.out.println("Person 被銷毀了...");
        }
    }
    3、Bean注冊配置類(單實例)
    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);
            //關閉容器
            annotationConfigApplicationContext.close();
        }
    }
    5、測試結果

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

    6、Bean注冊配置類(多實例)
    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、測試結果

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

    三、Bean實現接口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 創建了...");
        }
        @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、測試結果

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

    四、通過注解@PostConstruct和@PreDestroy

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

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

    五、使用接口BeanPostProcessor實現類(后置處理器)

    1、項目結構

    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 創建了...");
        }
        @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實現類(后置處理器)
    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;
    /**
     * 后置處理器:初始化前后進行處理工作
     */
    @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、測試結果

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

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

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    文山县| 襄垣县| 江陵县| 昌江| 定日县| 湟源县| 三台县| 南靖县| 贵阳市| 无极县| 靖远县| 东兴市| 昌黎县| 淳安县| 龙岩市| 环江| 民权县| 安多县| 西乌珠穆沁旗| 清河县| 桐城市| 古蔺县| 祁连县| 临夏市| 施甸县| 井研县| 唐海县| 平谷区| 买车| 奇台县| 安岳县| 裕民县| 堆龙德庆县| 黔西县| 临朐县| 吴江市| 贡觉县| 金坛市| 许昌市| 太保市| 巴林左旗|