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
總結
以上是生活随笔為你收集整理的spring中基于Java容器配置注解的区别及使用场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一页纸项目管理模板_项目管理职场必备读物
- 下一篇: 浅谈Java中类加载机制