首頁 > Java > java教程 > 主體

Java Spring Bean生命週期管理的範例分析

王林
發布: 2023-04-18 09:13:44
轉載
1456 人瀏覽過

    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生命週期管理的範例分析

    Java Spring Bean生命週期管理的範例分析

    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();
        }
    }
    登入後複製
    Java Spring Bean生命週期管理的範例分析3、測試結果

    四、透過註解@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、專案結構###############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生命週期管理的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板