Bean的裝配可以理解爲DI,也就是Bean依賴注入的方式。下面對常見的三種方式進行總結。
基於XML的裝配
設置注入(Setter Injection)
要滿足兩個要求:一是Bean類必須提供一個默認的無參構造函數,二是Bean類必須爲需要注入的屬性提供相應的setter方法。使用的是<bean>元素的子元素<property>爲屬性注入值。
構造注入(Constructor Injection)
提供一個帶參的構造函數。使用的是<bean>元素的子元素<constructor-arg>爲屬性注入值。
基於註解(Annotation)
雖然使用基於XML配置文件的方式可以實現Bean的裝配。但是若應用程序中存在很多Bean的時候會導致配置文件的臃腫。從而不利於後續的維護和升級。
常見的註解:
@Component:
使用此註解描述Spring中的Bean。但是一個泛化概念,僅僅表示一個組件,且可以使用在任何層次。使用時僅僅需要將該註解標記到相應的類上即可
@Repository:
功能與@Component相同,作用於數據訪問層(DAO)
@Service
功能與@Component相同,作用於業務層(Service)
@Controller
功能與@Component相同,作用於控制層(Controller)
@Authowired
配合對應的註解處理器,完成Bean的自動配置工作,默認是按照Bean的類型進行裝配
@Resource:
作用和@Authowired一樣。區別在於默認是先按照Bean的實例名稱進行裝配,。其中有name和type兩個屬性。指定name則按照實例名稱裝配,指定type則按照實例類型裝配。不指認的情況下先按照實例名稱裝配,匹配不成功按照實例類型裝配,若是都無法匹配成功,則拋出NoSuchBeanDefinitionException異常。
與XML方式相比簡化了DI的配置,即不需要配置子元素<property>或者<constructor-arg>。但是同樣需要在配置文件中配置相應的Bean。因此可以採用進行包掃描的方式。
自動裝配