spring中基於Java容器配置註解的區別及使用場景
轉載自百家號作者:有趣的程式碼
@Component、@Service、@Controller、@Repository;@Configuration、@Bean區別,使用場景

從spring3.0開始,基於javaconfig的專案,支援使用java來定義bean,而不是傳統的xml檔案。@Component是一個通用的stereotype,可以用於任何受容器管理的bean。而@Service、@Controller、@Repository是用於特殊形式的@Component,註解在型別上,但本質是一樣的。
在@Configuration中配合@ComponentScan使用,spring 自動檢測stereotype類,然後在application context註冊相應的bean definition。在執行時會生成CGLIB的子類,在呼叫父類方法前,子類會先查詢快取。從spring3.2開始,CGLIB已經被包含在spring中。
CGLIB的限制:
1、@Configuration註解的類不能是final;
2、從4.3開始,任何建構函式都允許在配置類上使用,包括使用@Autowired或用於預設注入的單個非預設建構函式宣告。
3、若不想要CGLIB對bean的限制,則可以使用@Component作為配置類,跨方法的呼叫不會被攔截,因此你必須使用建構函式或方法級別的依賴注入。
@Bean註解在方法上,用於實現工廠方法。與@Configuration搭配使用,不同的方法(只new一次)代表相同的例項,可以用於內部bean的依賴只需要呼叫另一個bean相應的方法;而與@Component搭配使用,不同的方法(只new一次)代表不同的例項,即不能用於內部bean的依賴。
若是第三方服務想由spring容器管理,則需要使用@Bean註解提供工廠方法。若是自己的服務則可以註解@Component(@Service、@Controller、@Repository),由容器自動掃描。
為了讓學習變得輕鬆、高效,今天給大家免費分享一套Java教學資源。幫助大家在成為Java架構師的道路上披荊斬棘。需要資料的歡迎加入學習交流群:9285,05736