spring自動裝配

spring提供了自動裝配(autowiring)和自動檢測(autodiscovery)用來減小XML的配置數量。spring

自動裝配bean屬性mvc

  • byName——把與Bean的屬性具備相同名字(或ID)的其餘Bean自動裝配到Bean的對應屬性中。

  示例:ui

import com.springinaction.springdol.Instrumentalist;
public class Instrumentalist{
    private String song;
    private Object instrument;
}
<bean id="instrument" class="com.springinaction.springidol.Saxophone"/>

<bean id="kenny" class="com.springinaction.springdol.Instrumentalist"
    autowire="byName">
    <property name="song" value="Jingle Bells"/>
</bean>

 

  • byType——把與Bean的屬性具備相同類型的其餘Bean自動裝配到Bean的對應屬性中。
  • constructor——把與Bean的構造器入參具備相同類型的其餘Bean自動裝配到Bean構造器的對應入參中。
  • autodetect——首先嚐試使用constructor進行自動裝配。若是失敗,再嘗試使用byType進行自動裝配。

使用註解裝配this

從spring 2.5開始,最有趣的一種裝配spring Bean的方式是使用註解自動裝配Bean屬性。spring容器默認禁用註解裝配。因此在使用基於註解的自動裝配前,咱們須要在spring配置中啓用它。最簡單的啓用方式是使用spring的context命名空間配置中的<context:annotation-config>元素。spa

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  
    <context:annotation-config/>
    <!--bean declarations go here--> 
</beans>

這樣配置,<context:annotation-config>元素告訴spring咱們打算使用基於註解的自動裝配。一旦配置完成,咱們能夠對代碼添加註解。spring3支持以下幾種註解:code

  • @Autowired註解;
  • @Inject註解;
  • @Resource註解;

 

@Autowired
public void setInstrument(Instrument instrument){
    this.instrument = instrument;  
}

這樣就能夠移除對instrument經過屬性<property>在XML中的裝配了。component

另外還能夠使用@Autowired註解直接標註屬性,並刪除setting方法:xml

@Autowired
private Instrument instrument;

而且@Autowired不會受限於private關鍵字,仍然能夠被自動裝配。默認狀況下,@Autowired具備強契約特徵,若是沒有Bean能夠裝配到@Autowired所標註的屬性或參數中,自動裝配就會失敗,在這種狀況下,能夠經過設置@Autowired的required屬性爲false來配置自動裝配是可選的。blog

@Autowired(require=false)
private Instrument instrument;

當有多個Bean知足裝配條件時,也會拋出異常,爲了確保咱們須要的Bean被裝配,要使用@qualifier註解。it

@Autowired
@qualifier("guitar")
private Instrument instrument;

如上,@qualifier註解將嘗試注入ID爲guitar的Bean。

自動檢測Bean

 爲了配置spring自動檢測,須要使用<context:component-scan>元素代替<context:annotation-config>:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  
    <context:component-scan
        base-package="com.springinaction.springidol">
    </context:component-scan>
    
    <!--bean declarations go here--> 
</beans>

<context:component-scan>元素會掃描指定的包及其全部子包,並查找出可以自動註冊爲spring Bean的類。base-package屬性標識了<context:component-scan>元素全部的包。

  • @Component——通用的構造型註解,標識該類爲spring組件;
  • @Controller——標識將該類定義爲spring mvc controller;
  • @Repository——標識將該類定義爲數據倉庫;
  • @Service——標識將該類定義爲服務;
相關文章
相關標籤/搜索