在Spring框架的發佈版本中,共包含了20個不一樣的模塊,能夠劃分爲6類不一樣的功能。java
爲了下降Java開發的複雜性,Spring採起了如下4種關鍵策略:spring
建立應用對象之間協做關係的行爲一般稱爲裝配(wiring),這也是依賴注入(DI)的本質。編程
當描述bean如何進行裝配時,Spring具備很是大的靈活性,它提供了三種主要的裝配機制:安全
Spring從兩個角度來實現自動化裝配:架構
@Component註解代表該類會做爲組件類,並告知Spring要爲這個類建立bean
@ComponentScan註解啓用組件掃描
@Autowired註解實現自動裝配框架
@Bean註解會告訴Spring這個方法將會返回一個對象,該對象要註冊爲Spring應用上下文中的bean。3d
<?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="knight" class="com.fiberhome.tongl.knight.BraveKnight"> <constructor-arg ref="quest" /> </bean> <bean id="quest" class="com.fiberhome.tongl.knight.SlayDragonQuest"> <constructor-arg value="#{T(System).out}" /> </bean> </beans>
在XML中聲明DI時,會有多種可選的配置方案和風格。具體到構造器注入,有兩種基本的配置方案可供選擇:代理
屬性注入,也有兩種基本的配置方案可供選擇:code
儘量地使用自動配置的機制。顯式配置越少越好,以免顯式配置所帶來的維護成本。當你必需要顯式配置bean的時候(好比,有些源碼不是由你來維護的,而當你須要爲這些代碼配置bean的時候),應該優先選擇基於Java的配置,它比基於XML的配置更增強大、類型安全而且易於重構。最後,只有當你想要使用便利的XML命名空間,而且在JavaConfig中沒有一樣的實現時,才應該使用XML。component
Spring定義了多種做用域,能夠基於這些做用域建立bean,包括:
單例是默認的做用域,可是正如以前所述,對於易變的類型,這並不合適。若是選擇其餘的做用域,要使用@Scope註解,它能夠與@Component或@Bean一塊兒使用。
在Spring中,處理外部值的最簡單方式就是聲明屬性源並經過Spring的Environment來檢索屬性。
@PropertySource引用類路徑中.properties的文件。
@Value 屬性佔位符(配置PropertySourcesPlaceholderConfigurer bean)
DI有助於應用對象之間的解耦,而AOP能夠實現橫切關注點與它們所影響的對象之間的解耦。
@AspectJ註解解代表類不單單是一個POJO,仍是一個切面
@EnableAspectJAutoProxy註解啓用自動代理功能
AspectJ提供了五個註解來定義通知