spring中基于Java容器配置注解的区别及使用场景
轉(zhuǎn)載自百家號(hào)作者:有趣的代碼
@Component、@Service、@Controller、@Repository;@Configuration、@Bean區(qū)別,使用場(chǎng)景
從spring3.0開始,基于javaconfig的項(xiàng)目,支持使用java來定義bean,而不是傳統(tǒng)的xml文件。@Component是一個(gè)通用的stereotype,可以用于任何受容器管理的bean。而@Service、@Controller、@Repository是用于特殊形式的@Component,注解在類型上,但本質(zhì)是一樣的。
在@Configuration中配合@ComponentScan使用,spring 自動(dòng)檢測(cè)stereotype類,然后在application context注冊(cè)相應(yīng)的bean definition。在運(yùn)行時(shí)會(huì)生成CGLIB的子類,在調(diào)用父類方法前,子類會(huì)先查找緩存。從spring3.2開始,CGLIB已經(jīng)被包含在spring中。
CGLIB的限制:
1、@Configuration注解的類不能是final;
2、從4.3開始,任何構(gòu)造函數(shù)都允許在配置類上使用,包括使用@Autowired或用于默認(rèn)注入的單個(gè)非默認(rèn)構(gòu)造函數(shù)聲明。
3、若不想要CGLIB對(duì)bean的限制,則可以使用@Component作為配置類,跨方法的調(diào)用不會(huì)被攔截,因此你必須使用構(gòu)造函數(shù)或方法級(jí)別的依賴注入。
@Bean注解在方法上,用于實(shí)現(xiàn)工廠方法。與@Configuration搭配使用,不同的方法(只new一次)代表相同的實(shí)例,可以用于內(nèi)部bean的依賴只需要調(diào)用另一個(gè)bean相應(yīng)的方法;而與@Component搭配使用,不同的方法(只new一次)代表不同的實(shí)例,即不能用于內(nèi)部bean的依賴。
若是第三方服務(wù)想由spring容器管理,則需要使用@Bean注解提供工廠方法。若是自己的服務(wù)則可以注解@Component(@Service、@Controller、@Repository),由容器自動(dòng)掃描。
?為了讓學(xué)習(xí)變得輕松、高效,今天給大家免費(fèi)分享一套Java教學(xué)資源。幫助大家在成為Java架構(gòu)師的道路上披荊斬棘。需要資料的歡迎加入學(xué)習(xí)交流群:9285,05736
總結(jié)
以上是生活随笔為你收集整理的spring中基于Java容器配置注解的区别及使用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一页纸项目管理模板_项目管理职场必备读物
- 下一篇: 热门专业学习之关于java的一些知识