天天看點

Spring 擴充注解

  1. BeanFactoryPostProcessor:beanFactory後置處理器,的攔截時機:所有Bean的定義資訊已經加載到容器,但還沒有被執行個體化。可以對beanFactory進行一些操作。
  2. BeanPostProcessor:bean後置處理器,攔截時機:bean建立對象初始化前後進行攔截工作。可以對每一個Bean進行一些操作。
  3. BeanDefinitionRegistryPostProcessor:是BeanFactoryPostProcessor的子接口,攔截時機:所有Bean的定義資訊将要被加載到容器,但還沒有被執行個體化,可以對每一個Bean的BeanDefinition進行一些操作。
  4. ApplicationListener,自定義ApplicationListener實作類并加入到容器中,可以監聽spring容器中釋出的事件。spring在建立容器的時候(finishRefresh()方法)會釋出ContextRefreshedEvent事件,關閉的時候(doClose())會釋出ContextClosedEvent事件。也可以通過spring容器的publishEvent釋出自己的事件。
    1. 事件釋出流程:publishEvent方法
      1. 擷取事件的多點傳播器,getApplicationEventMulticaster()。
      2. 調用multicastEvent(applicationEvent, eventType)派發事件。擷取到所有的ApplicationListener,即getApplicationListeners(),然後同步或者異步的方式執行監聽器的onApplicationEvent。
    2. 事件的多點傳播器的初始化中(initApplicationEventMulticaster()),如果容器中沒有配置applicationEventMulticaster,就使用SimpleApplicationEventMulticaster。然後擷取所有的監聽器,并把它們注冊到SimpleApplicationEventMulticaster中。
  5. @EventListener(class={}):在普通的業務邏輯的方法上監聽事件特定的事件。原理:EventListenerMethodProcessor是一個SmartInitializingSingleton,當所有的單例bean都初始化完以後, 容器會回調該接口的方法afterSingletonsInstantiated(),該方法裡會周遊容器中所有的bean,并判斷每一個bean裡是否帶有@EventListener注解的Method,然後建立ApplicationListenerMethodAdapter存儲并包裝該Method,最後将ApplicationListenerMethodAdapter添加到spring容器中。