成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring注解專題系類(二)

Alex / 3159人閱讀

摘要:的在單例被破壞時由進行方法調(diào)用。定義并實現(xiàn)這兩個接口容器創(chuàng)建完成注解是的縮寫,意思是規(guī)范提案。在創(chuàng)建完成并且屬性賦值完成來執(zhí)行初始化方法在容器銷毀之前回調(diào)通知支持自動裝配,類似。

Spring注解應(yīng)用篇--IOC容器Bean生命周期
這是Spring注解專題系類文章,本系類文章適合Spring入門者或者原理入門者,小編會在本系類文章下進行企業(yè)級應(yīng)用實戰(zhàn)講解以及spring源碼跟進。
本文來自公眾號:B一下爪哇
環(huán)境準(zhǔn)備

編譯器IDEA

maven依賴spring-context version:4.3.12.RELEASE

maven依賴junit version:4.11

Bean注解來指定bean初始化和銷毀方法

前面一章提過,在配置類中通過@Bean來將組件注入到容器中,在容器中,Bean的生命周期大抵上可以分為創(chuàng)建--初始化--銷毀的過程,容器管理著組件的全部生命周期。Bean注解源碼里面包含initMethod和destroyMethod兩個屬性,可以分別來自定義bean的初始化方法和銷毀方法。
自定義格式:

@Bean(initMethod=,destoryMethod=)

測試:
先在Bean中自定義初始化和銷毀方法:

public class ExampleBean {
    private String name;
    private int age;
.....
public void init(){
        System.out.println("ExampleB init...");
    }
    public void destory(){
        System.out.println("Example destory...");
    }
}

配置類:

@Configuration
public class BaseConfig {
    @Bean(value="beanIdDefinition",initMethod = "init",destroyMethod = "destory")
    public ExampleBean exampleBean(){
        return new ExampleBean();
    }
}

測試類:

@Test
    public void shouldAnswerWithTrue()
    {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BaseConfig.class);
        System.out.println("IOC容器創(chuàng)建完成...");
        String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
        ctx.close();
    }

output:

exampleBean constructor......
ExampleB init...
IOC容器創(chuàng)建完成...
Example destory...

由此可知,在容器初始化過程中已經(jīng)完成對bean的初始化工作,并且在容器關(guān)閉途中,調(diào)用bean的銷毀方法。(下一章分析容器初始化大致做了哪一些工作)

InitializingBean和DisposableBean接口指定Bean初始化和銷毀方法

InitializingBean的afterPropertiesSet在設(shè)置提供Bean的屬性值后由BeanFactory調(diào)用進行方法調(diào)用。
DisposableBean的destory在Bean單例被破壞時由BeanFactory進行方法調(diào)用。
定義Bean并實現(xiàn)這兩個接口

public class LifeCycleBean implements InitializingBean, DisposableBean{
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("LifeCycleBean afterPropertieSet....");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("LifeCycleBean destory....");
    }
}

output:

LifeCycleBean afterPropertieSet....
IOC容器創(chuàng)建完成...
LifeCycleBean destory....
PostConstruct & PreDestory注解

JSR是Java Specification Requests的縮寫,意思是Java 規(guī)范提案。
JSR250已經(jīng)添加至Java SE6中,常用的大概就是PostConstruct初始化、PreDestory銷毀、Resource資源等。
Spring支持JSR250的注解。PostConstruct在bean創(chuàng)建完成并且屬性賦值完成;來執(zhí)行初始化方法;PreDestory在容器銷毀bean之前回調(diào)通知;Resource支持bean自動裝配,類似Autowired。
使用方式,在Bean中直接添加:

@PostConstruct
    public void initPost(){
        System.out.println("ExampleBean JSR250 PostConstruct...");
    }

    @PreDestroy
    public void destoryPre(){
        System.out.println("ExampleBean JSR250 PreDestory...");
    }

測試output:

exampleBean constructor......
ExampleBean JSR250 PostConstruct...
IOC容器創(chuàng)建完成...
ExampleBean JSR250 PreDestory...
BeanPostProcessor后置處理器

BeanPostProcessor【接口】:bean后置處理器在Bean的生命周期起到一個承上啟下的作用,在Bean初始化前后進行處理工作。

PostProcessorBeforeInitialization方法:在初始化方法調(diào)用之前調(diào)用;

postProcessorBefore方法:在bean初始化方法調(diào)用之后工作

兩個方法都包含2個相同的參數(shù):
@param Object o:Bean實例
@param String s:beanName

定義一個Bean實現(xiàn)后置處理器接口:

public class BeanPostProcessorDefinition implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
        System.out.println("postProcessBeforeInitialization -->"+s+" = "+o);
        return o;
    }

    @Override
    public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
        System.out.println("postProcessorAfterInitialization -->"+s+"="+o);
        return o;
    }
}

以容器中存在的id為exampleBean的bean為例:查看output:

//部分容器初始化的一些bean
exampleBean constructor......
postProcessBeforeInitialization -->exampleBean = ExampleBean{name="null", age=0}
ExampleBean JSR250 PostConstruct...
postProcessorAfterInitialization -->exampleBean=ExampleBean{name="null", age=0}
IOC容器創(chuàng)建完成...

由此不難得出,在容器初始化過程中,大致依次完成bean的創(chuàng)建,實例化,屬性賦值,執(zhí)行bean后置處理器初始化之前的方法,執(zhí)行初始化方法,執(zhí)行bean后置處理器初始化之后的方法。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74626.html

相關(guān)文章

  • Spring注解專題系列

    摘要:用法先創(chuàng)建個組件,,,分別在類上加上注解。發(fā)現(xiàn)有一個屬性源碼注釋這樣說的自動檢測使用組件。在的方法中,表示不匹配,代表匹配。這就說明使用注冊組件有種方式。 Spring注解應(yīng)用篇--IOC容器Bean組件注冊 這是Spring注解專題系類文章,本系類文章適合Spring入門者或者原理入門者,小編會在本系類文章下進行企業(yè)級應(yīng)用實戰(zhàn)講解以及spring源碼跟進。 環(huán)境準(zhǔn)備 編譯器IDEA...

    CocoaChina 評論0 收藏0
  • Spring Cloud Alibaba基礎(chǔ)教程:支持的幾種服務(wù)消費方式

    摘要:那么為什么可以帶給我們這樣的完美編碼體驗?zāi)貙嶋H上,這完全歸功于的封裝,由于在服務(wù)注冊與發(fā)現(xiàn)客戶端負載均衡等方面都做了很好的抽象,而上層應(yīng)用方面依賴的都是這些抽象接口,而非針對某個具體中間件的實現(xiàn)。 通過《Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)》一文的學(xué)習(xí),我們已經(jīng)學(xué)會如何使用Nacos來實現(xiàn)服務(wù)的注冊與發(fā)現(xiàn),同時也介紹如何通過LoadBala...

    curlyCheng 評論0 收藏0
  • Spring Boot 2 快速教程:WebFlux 快速入門(

    摘要:響應(yīng)式編程是基于異步和事件驅(qū)動的非阻塞程序,只是垂直通過在內(nèi)啟動少量線程擴展,而不是水平通過集群擴展。三特性常用的生產(chǎn)的特性如下響應(yīng)式編程模型適用性內(nèi)嵌容器組件還有對日志消息測試及擴展等支持。 摘要: 原創(chuàng)出處 https://www.bysocket.com 「公眾號:泥瓦匠BYSocket 」歡迎關(guān)注和轉(zhuǎn)載,保留摘要,謝謝! 02:WebFlux 快速入門實踐 文章工程: JDK...

    gaara 評論0 收藏0
  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務(wù)方面的使用。目標(biāo)達成后還會有去構(gòu)建微服務(wù),希望大家多多支持。原文地址手把手教程優(yōu)雅的應(yīng)用四手把手實現(xiàn)后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學(xué)習(xí) | 掘金技術(shù)征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評論0 收藏0
  • 手摸手,帶你封裝一個vue component

    摘要:靈活性和針對性。所以我覺得大部分組件還是自己封裝來的更為方便和靈活一些。動手開干接下來我們一起手摸手教改造包裝一個插件,只要幾分鐘就可以封裝一個專屬于你的。 項目地址:vue-countTo配套完整后臺demo地址:vue-element-admin系類文章一:手摸手,帶你用vue擼后臺 系列一(基礎(chǔ)篇)系類文章二:手摸手,帶你用vue擼后臺 系列二(登錄權(quán)限篇)系類文章三:手摸手,帶...

    pkhope 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<