@component與@Configuration建立bean
-
@configuration配置
針對@configuration,首先@Configuration與@Bean搭配使用,一般在專案中定義配置累才會使用這個註解
@Configuration
代表這個類是一個配置類,可理解為用spring的時候xml裡面的<beans>標籤
@Bean
用來定義一個bean,可以指定初始、銷燬方法,及bean範圍等,可理解為用spring的時候xml裡面的<bean>標籤
-
bean的管理方式
Spring幫助我們管理Bean分為兩個部分,一個是註冊Bean,一個裝配Bean
。 完成這兩個動作有三種方式,
一、是使用自動配置的方式、
二、是使用JavaConfig的方式,
三、是使用XML配置的方式。
-
自動配置
針對於@Component註解:使用@Component去告訴Spring,我是一個bean,你要來管理我,然後使用@AutoWired註解去裝配Bean(所謂裝配,就是管理物件直接的協作關係)(參考來自Spring之@Configuration、@Component、@Bean - 雲+社群 - 騰訊雲 (tencent.com))。
@Configuration @ConfigurationProperties("remote") @Data public class RemoteProperties {/** * 呼叫ip */ private String host; /** * 呼叫本地ip */ private String ip; }
-
JavaConfig配置
@Configuration其實就是告訴spring,spring容器要怎麼配置(怎麼去註冊bean,怎麼去處理bean之間的關係(裝配))。@Bean的意思就是,我要獲取這個bean的時候,你spring要按照這種方式去幫我獲取到這個bean。
@Configuration public class BeanConfig { @Beanpublic ThreadPoolTaskScheduler threadPoolTaskScheduler() { ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler(); // 執行緒池數量 executor.setPoolSize(Runtime.getRuntime().availableProcessors()); //設定好了之後可以方便我們定位處理任務所在的執行緒池 executor.setThreadNamePrefix("charge-task-Executor-"); //用來設定執行緒池關閉的時候等待所有任務都完成再繼續銷燬其他的Bean executor.setWaitForTasksToCompleteOnShutdown(true); //該方法用來設定執行緒池中任務的等待時間,如果超過這個時候還沒有銷燬就強制銷燬,以確保應用最後能夠被關閉,而不是阻塞住 executor.setAwaitTerminationSeconds(60); return executor; } }
-
xml的方式
<bean>標籤就是告訴spring怎麼獲取這個bean,各種<ref>就是手動的配置bean之間的關係。
用@Bean註解的方法:會例項化、配置並初始化一個新的物件,這個物件會由spring IoC 容器管理。
-
針對@Component與@Configuration同時對同一物件生成bean
@Configuration
加 @Bean
會建立一個 userName 不為 null 的 UserManager 物件,
而 @Component
也會建立一個 userName 為 null 的 UserManager 物件
那麼我們在其他物件中注入 UserManager 物件時,到底注入的是哪個物件?