創建應用對象之間協作關係的行爲通常稱爲裝配(wiring),這也是依賴注入(DI)的本質。當描述bean如何進行裝配時,Spring具有非常大的靈活性,它提供了三種主要的裝配機制:
- 在XML中進行顯式配置。
- 在Java中進行顯式配置。
- 隱式的bean發現機制和自動裝配。
建議是儘可能地使用自動配置的機制。顯式配置越少越好。當你必須要顯式配置bean的時候(比如,有些源碼不是由你來維護的,而當你需要爲這些代碼配置bean的時候),推薦使用類型安全並且比XML更加強大的JavaConfig。最後,只有當你想要使用便利的XML命名空間,並且在JavaConfig中沒有同樣的實現時,才應該使用XML。
Spring 從兩個角度實現自動裝配:
- 組件掃描:Spring自動發現應用上下文中創建的bean
- 自動裝配:Spring自動滿足bean之間的依賴
類上使用了@Component註解。這個簡單的註解表明該類會作爲組件類,並告知Spring要爲這個類創建bean。類上使用了@ComponentScan註解,這個註解能夠在Spring中啓用組件掃描。(如果沒有其他配置的話,@ComponentScan默認會掃描與配置類相同的包。也可以在 XML 中配置啓用組件掃描)
在滿足依賴的過程中,會在Spring應用上下文中尋找匹配某個bean需求的其他bean。爲了聲明要進行自動裝配,我們可以藉助Spring的@Autowired註解。
想要將第三方庫中的組件裝配到你的應用中,在這種情況下,無法在它的類上添加@Component註解和@Autowired註解,因此就不能使用自動化裝配的方案了
通常會將JavaConfig放到單獨的包中,使它與其他的應用程序邏輯分離開來
創建JavaConfig類的關鍵在於爲其添加@Configuration註解。要在JavaConfig中聲明bean,我們需要編寫一個方法,這個方法會創建所需類型的實例,然後給這個方法添加@Bean註解
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
在XML配置中,這意味着要創建一個XML文件,並且要以<beans>元素爲根。配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.163.com"/>
</bean>
</beans>
自動裝配的時候會考慮到Spring容器中所有的bean,不管它是在JavaConfig或XML中聲明的還是通過組件掃描獲取到的。
在JavaConfig中引入其他Java配置,用@Import
在JavaConfig中引入XML的配置,用@ImportResource註解
在xml中引用其他xml配置,用<import resource="配置文件路徑">
在xml中引用其他Java配置,直接用<bean class="配置類路徑">