Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire
創建應用對象之間協作關系的行為稱為裝配(wiring),這也是依賴注入的本質。
Spring容器負責創建應用程序中的bean并通過DI來協調這些對象之間的關系,而開發者需要告訴Spring需要創建哪些bean并且如何將其裝配在一起。
1、Spring提供了三種主要的裝配機制
- 在XML文件中進行顯示裝配;
- 在Java代碼中顯示裝配;(JavaConfig)
- 隱式的bean發現機制和自動裝配;(注解)
2、如何選擇裝配機制?
完全可以靈活配置。
但作者建議盡可能地使用自動裝配機制,且顯示配置越少越好。
當必須顯示配置bean(有些源碼不是由你維護,而你需要為這些代碼配置bean),作者推薦使用類型安全并且比XML更加強大的JavaConfig。
只有當你想使用便利的XML命名空間,并且在JavaConfig中沒有同樣的實現時,才應該使用XML。
?
3、Spring怎么實現自動化裝配?
- 組件掃描(component scanning):Spring自動發現應用上下文所創建的bean;
- 自動裝配(autowiring):Spring自動滿足bean之間的依賴
兩者組合能發揮強大的威力,能夠將顯示配置降低到最少。
需要了解的是,在自動裝配時,不要在意裝配的bean來自哪里。自動裝配機制會考慮到容器中所有的bean,不管它是在JavaConfig or XML中聲明還是通過組件掃描獲取到的。只要bean在同一個Spring應用上下文中就行。
?
4、幾種開啟組件掃描的方式:
JavaConfig:
/*這是一個用于專用于設置配置的Java類*/@Configuration //聲明這是配置類 @ComponentScan //開啟組件掃描 public class JavaConfigClass{ }
? @ComponentScan? 默認掃描與配置類相同的包(肯定就包括子包啦)。
?
@ComponentScan(basePackages={“Package1”,“Package2”})也可以通過basePackages屬性指定一個或者多個基礎包,但是這樣并不安全。
@ComponentScan(basePackages={AAA.class,BBB.class}),這些類所在包會作為組件掃描的基礎包。還可以專門創建一個空標記接口,用于標記基礎包,這樣可以保持對重構的友好。
XML:
<context:component-scan base-package="com.biguo.xxx"/>?
5、自動裝配中的注解
@Component("String ID"):該類會作為組件類,并告知Spring要為這個類創建bean。
Spring應用上下文中所有的bean都會給定一個ID,若沒有明確指定,Spring會根據類名為其指定一個ID,默認為把類名第一個字母小寫。
(JavaConfig中,@Named("String ID")效果相同)
?
@Autowired
常用于構造器、setter方法,當Spring創建它們所在對象的bean時,會傳入一個相應參數類型的bean,即自動滿足所創建bean 的(對另一個bean的)依賴。
(這里就要考慮所依賴的bean存在不存在、有多少個的問題啦)
(JavaConfig中,為@Inject)
6、JavaConfig中聲明bean
@Bean——告訴Spring這個方法返回一個對象,該對象要注冊為Spring應用上下文中的bean,bean的默認ID和這個方法名一致,也可以用name屬性自定義啦。
Spring會攔截所有對@Bean注解的方法的調用,確保直接返回這個方法創建的bean,而不是讓其執行實際調用。 (這個bean還可以重復使用,因為Spring默認單例模式)
?
7、關于混合配置
JavaConfig中引用XML配置——@Import(xx.class)、@ImportResource("classpath:xxx.config.xml")
XML配置中引用JavConfig~~~
?
轉載于:https://www.cnblogs.com/bigbigbigo/p/8357521.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注释和简单用户交互程序
- 下一篇: day_work_02