spring生命週期回調
結合生命週期機制(官網提供)
1、實現InitializingBean接口重寫void afterPropertiesSet() throws Exception;方法
使用場景:再bean構造方法不方便處理場景下可以使用以上方式進行處理。
2、自定義init方法(xml)
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public class ExampleBean { public void init() { // do some initialization work } }
3、註解方式@PostConstruct
public class ExampleBean { @PostConstruct public void init() { // 此方法名隨便定義,最好使用此種方式,非侵入式 } }
銷燬回調就不在重複記錄,官網很明確。
從Spring 2.5開始,您有三個控制bean生命週期行爲的選項:
-
定製
init()
和destroy()
方法 -
在
@PostConstruct
和@PreDestroy
註釋。您可以組合這些機制來控制給定的bean。
includeFilters
與excludeFilters
使用場景:對某一bean進行排除過濾或者添加過濾使用
@Configuration @ComponentScan(basePackages = "org.example", includeFilters = @Filter(type = FilterType.REGEX, pattern = ".*Stub.*Repository"), excludeFilters = @Filter(Repository.class)) public class AppConfig { ... }
@Primary註釋使用
使用場景,當兩個數據源或者bean爲了告訴系統那個是主要的則使用@primary
由於按類型自動裝配可能會導致多個候選人,因此通常需要對選擇過程進行更多控制。實現這一目標的一種方法是使用Spring的@Primary
註釋。@Primary
表示當多個bean可以自動裝配到單值依賴項時,應該優先選擇特定的bean。如果候選者中只存在一個主bean,則它將成爲自動裝配的值
@Configuration public class MovieConfiguration { @Bean @Primary public MovieCatalog firstMovieCatalog() { ... } @Bean public MovieCatalog secondMovieCatalog() { ... } // ... }
@Primary註釋使用
@Primary
當可以確定一個主要候選者時,是通過具有多個實例的類型使用自動裝配的有效方式。當您需要更多控制選擇過程時,可以使用Spring的@Qualifier
註釋。您可以將限定符值與特定參數相關聯,縮小類型匹配集,以便爲每個參數選擇特定的bean。在最簡單的情況下,這可以是一個簡單的描述性值
生成候選組件索引
使用場景,大型應用啓動性能較慢的情況
雖然類路徑掃描速度非常快,但可以通過在編譯時創建候選的靜態列表來提高大型應用程序的啓動性能。在此模式下,所有作爲組件掃描目標的模塊都必須使用此機制。
要生成索引,請爲包含組件掃描指令目標的組件的每個模塊添加其他依賴項。以下示例顯示瞭如何使用Maven執行此操作:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-indexer</artifactId> <version>5.1.8.RELEASE</version> <optional>true</optional> </dependency> </dependencies>
對於Gradle 4.5及更早版本,應在compileOnly
配置中聲明依賴項,如以下示例所示
dependencies { compileOnly "org.springframework:spring-context-indexer:5.1.8.RELEASE" }
使用Gradle 4.6及更高版本時,應在annotationProcessor
配置中聲明依賴項,如以下示例所示:
dependencies { annotationProcessor "org.springframework:spring-context-indexer:5.1.8.RELEASE" }