Spring生命週期不可不知的回撥介面
上回說到 Spring bean生命週期中的InitializingBean介面,我們瞭解到這只是spring bean生命週期中修改bean的諸多方式之一,其實在整個生命週期中,修改bean的方式大致有如下幾種:
-
實現 InitializingBean介面 的 afterPropertiesSet()
-
實現 DisposableBean介面的 destroy()
-
給方法加@PostConstruct和@PreDestroy註解,需要說明一點,這兩個註解是JSR250標準中的,而Spring中InitDestroyAnnotationBeanPostProcessor類實現了這個標準
-
以xml的方式定義bean時,指定init method和destroy method
<bean id="testBeanLifeCycle" class="org.springframework.samples.mvc.beanPostProcessor.TestBeanLiftCycle"
init-method="xmlInit" destroy-method="xmlDestroy">
<property name="message" value="Hello World!"/</bean>
在眾多的lifecycle機制中,假設一個bean使用了上邊所有的方式,那麼它們的執行順序是這樣的:
-
Methods annotated with @PostConstruct
-
afterPropertiesSet() as defined by the InitializingBean callback interface
-
A custom configured init() method
-
Methods annotated with @PreDestroy
-
destroy() as defined by the DisposableBean callback interface
-
A custom configured destroy() method
我們在程式碼中來看
在Spring中,bean的生命週期管理都是由beanFactory來管理,上一篇我們有提到,實現了beanFactory的類AbstractAutowiredCapableBeanFactory完成了bean的init和destroy的工作,初始化方法是
invokeInitMethods方法如下
接下來看看destroy邏輯,在AbstractAutowiredCapableBeanFactory中我們找到destroy方法
再來看DisposableBeanAdapter的destroy做了什麼
來看個小demo來驗明正身
-
定義Spring bean TestBeanLifeCycle
-
在applicationContext.xml中宣告bean
-
以Junit方式啟動容器
-
然後我們會看到下面的輸出:
說了這麼多機制,那麼我們在使用的時候要注意什麼
推薦使用@PostConstruct和@PreDestroy,因為這來自JSR250,對Spring框架0耦合。
除此之外,Spring還提供了LifeCycle介面和LifeCycleProcessor介面,實現這些介面能讓bean的lifecycle關聯到Container的lifeCycle,當容器有啟動,停止,重新整理等動作時,會回撥到bean。
如果說所有這些Spring提供的機制還是不能滿足你的需求,那麼總有一款適合你——BeanPostProcessor介面,事實上在Spring架構內部,眾多的beanPostProcessor實現,能完成各種介面的回撥,或者自定義方法的觸發。關於更多BeanPostProcessor,且聽下回分解。
歡迎關注,期待與您的交流,讓我們攜手在通往牛逼的小路上徐徐前行。
相關推薦
Spring生命週期不可不知的回撥介面
上回說到 Spring bean生命週期中的InitializingBean介面,我們瞭解到這只是spring bean生命週期中修改bean的諸多方式之一,其實在整個生命週期中,修改bean的方式大致有如下幾種: 實現 InitializingBean介面 的 afterPropertiesSet
Android--測試Activity的生命週期事件及其回撥方法
//activity_main.xml <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="h
C#POST 支付寶/微信回撥介面
一般支付寶/微信的回撥介面都會返回xml格式,下面是呼叫類似這種介面的辦法: public async Task<string> GetData() { string requestUrl = "http://localhost:xxx/xx/xxxx/xxx/xxxx
從原始碼角度看Spring生命週期(官方最全)
Spring在beanfactory中給出了spring的生命週期的list列表 一、bean初始化前的處理 Bean factory implementations should support the standard bean lifecycle interfaces as
淺析微信支付:申請退款、退款回撥介面、查詢退款
本文是【淺析微信支付】系列文章的第八篇,主要講解商戶如何處理微信申請退款、退款回撥、查詢退款介面,其中有一些坑的地方,會著重強調。 淺析微信支付系列已經更新七篇了喲~,沒有看過的朋友們可以看一下哦。 淺析微信支付:查詢訂單和關閉訂單 淺析微信支付:支付結果通知 淺析微信支付:統一下單介面
Android中點選事件回撥介面踩坑心得
有時候寫程式碼的時候有這樣的功能要求,如在ListView或recyclerView中的Item中的控制元件(如Button,TextView)上添加回調介面事件。其實難點就在添加回調介面事件上,怎麼寫介面,介面回撥在哪裡,這才是關鍵。下面是個例子: 介面的寫法:一下是兩介
spring原始碼分析:spring生命週期二
接著上一篇我們看看具體是哪裡的程式碼執行了。 1.初始化BeanFactoryPostProcessor invokeBeanFactoryPostProcessors(beanFactory);--> PostProcessorRegistrationDelegate.
spring原始碼分析:spring生命週期
最近在看springboot自動配置,看到了@Conditional,@ConditionalOnMissingBean等等。這些註解,一直研究他們是如何實現springboot的條件註解的。由他們回到了@Configuration,回到了ConfigurationClassPostPr
[Android]RecyclerView基本使用+adapter回撥介面實現點選事件
一、概述 RrcyclerView是ListView的加強版,不僅可以輕鬆實現和ListView同樣的效果,還優化了ListView中存在的各種不同之處。 Android官方推薦我們使用RecyclerView。 二、基本用法 1.首先需要在專案的build.gradle中新增相
第三方支付平臺支付介面及回撥介面開發
作為開放式的B/S架構程式,無論所屬電商,金融,機械製造,企業OA,ERP,CRM,CMS等等行業或系統中,第三方支付以及銀聯支付的業務一定是客戶關心所在,也是保證客戶系統盈利運營的一個重要保障。通常這種B2C或者C2C系統的開發,商戶使用者所關注的支付平臺大多離不開“阿里支付寶,快錢,騰訊財付通,易寶支
解決:接入微信支付,調不起回撥介面WXPayEntryActivity
最近開發公司SDK需要接入微信支付功能,於是上了微信開發者平臺,下載微信的SDK,按著文件接入。當我進行微信支付,需要調起微信客戶端,但是卻沒有。而微信回撥WXPayEntryActivity也沒有被回撥起來。這就很奇怪了,看回文件,說要把WXPayEntryActivity
Spring中模板模式和回撥模式(一)
模板模式 public abstract class TemplatePattern { //模板方法 public final void templateMethod(){ method1();
一個自定義dialog提供確定和取消按鈕的回撥介面
public class MessageDialog { Context context; AlertDialog dialog; AlertDialog.Builder bu
android 萬能回撥介面
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">剛做android開發時經常遇到資料傳遞的問題,因為對Java也不是很熟
基於Fragment回撥介面委託工作任務給託管Activity
要委託工作任務給託管activity,通常的做法是由fragment定義名為Callbacks的回撥介面。 回撥介面定義fragment委託給Activity處理的工作任務。 任何打算託管fragment的Activity都必須實現它。 有了回撥介面,就不
android中的回撥-介面回撥
發現很多初學者對於回撥,介面,抽象 等概念理解的不是很透徹。 今天就以我的經驗把 介面回撥給大家闡述一下。適合初學者看看。 先簡單說說我的理解吧, 所謂的介面回撥。 你先將介面定義好,然後在特定的條件下條用它。 可能很多初學者開始的時候很疑惑,其實這也東西你天天都在
OK回撥介面資料型別-泛型回撥
在OK請求完成之後: handler.post(new Runnable() { @Override public void run() { Class<Object> genericUtil = GenericUtil.getGener
Spring生命週期之BeanFactoryPostPorcessor和BeanPostProcessor
BeanFactoryPostProcessor和BeanPostProcessor,這兩個介面,都是Spring初始化bean時對外暴露的擴充套件點。 1、BeanFactoryPostProcessor介面 該介面的定義如下: p
android回撥介面筆記
上圖: 佈局檔案: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/too
在Activity和Service之間使用Binder和回撥介面進行通訊
Activity和Service之間的通訊方式有多種:通過broadcast、擴充套件Binder類、使用Messenger、使用AIDL等。 擴充套件Binder類使用場景 如果你的服務僅供本地應用使用,不需要跨程序工作,則可以實現擴充套件Binder 類,讓你的客戶