Spring 註解自動裝載和檢測
自動裝配autowiring():有助於減少甚至消除配置<property>元素和<constructor-arg>元素,讓Spring自動識別如何裝配Bean的依賴關係;
自動檢測autodiscovery():比自動裝配更進一步,讓Spring能夠自動識別哪些類需要被配置成Spring Bean,從而減少<bean>元素的使用;
當自動裝配和自動檢測一起使用時,可以減少Spring的xml配置資料。
註解裝配
Spring2.5開始,使用註解自動裝配Bean的屬性,預設Spring容器禁用註解裝配,我們需要在Spring的context名稱空間中配置<context:annotation-config>元素開啟註解裝配
@Autowired標註set方法,普通方法,構造方法和屬性.
使用autowired註解標註屬性,刪除setter方法;
@Autowired(required=false)
private Instrument instrument;
required屬性為false表示配置自動裝配是可選的。當沒有找到Instrument的Bean時,屬性會設定為null;
<context:annotation-config>有助於完全消除Spring配置的<property>和<constructor-arg>元素,但是仍然需要<bean>元素顯示定義Bean
自動檢測
<context:componet-scan>元素完成了<context:annotation-arg>的工作,並且允許Spring自動檢測和定義Bean;
不再使用<bean>元素,Spring應用中的Bean都能夠實現定義和裝載;
<context:component-scan base-package="com.dynamic.oa"></context:component-scan>
該元素掃描指定包及其所有子包,並查找出能夠自動註冊為Spring Bean的類;
<context:component-scan>如何知道哪些類需要註冊為Spring Bean呢?下面的5中註解幫助自動檢測注入Bean
@Component:通用的構造型註解,表示該類為Spring元件
@Controller:標識將該類定義為Spring MVC Controller
@Repository:標識將該類定義為資料倉庫
@Service:標識將該類定義為服務
Spring掃描該包時,會講使用了構造型註解的的類,自動註冊為Spring Bean,並設定預設ID為無限定類名,全小寫;
總結:
使用註解和自動檢測的方式,減少了XML的配置量,註解裝載消除了Spring配置中的<property>和<constructor-arg>y元素。而自動檢測,通過構造型註解的配置,Spring在掃描配置的包時,自動定義和裝配Spring Bean