天天看點

Spring Ioc 使用注解的形式進行自動裝配

1.使用注解辨別元件

①普通元件:@Component

辨別一個受Spring IOC容器管理的元件

②持久化層元件:@Respository

辨別一個受Spring IOC容器管理的持久化層元件

③業務邏輯層元件:@Service

辨別一個受Spring IOC容器管理的業務邏輯層元件

④表述層控制器元件:@Controller

辨別一個受Spring IOC容器管理的表述層控制器元件

⑤元件命名規則

[1]預設情況:使用元件的簡單類名首字母小寫後得到的字元串作為bean的id

[2]使用元件注解的value屬性指定bean的id

事實上Spring并沒有能力識别一個元件到底是不是它所标記的類型,即使将@Respository注解用在一個表述層控制器元件上面也不會産生任何錯誤,是以@Respository、@Service、@Controller這幾個注解僅僅是為了讓開發人員自己明确目前的元件扮演的角色。

2.元件掃描

指定要掃描的包

<context:component-scan base-package="com.xxx.component"/>
           

[1]base-package屬性指定一個需要掃描的基類包,Spring容器将會掃描這個基類包及其子包中的所有類。

[2]當需要掃描多個包時可以使用逗号分隔。

[3]如果僅希望掃描特定的類而非基包下的所有類,可使用resource-pattern屬性過濾特定的類,示例:

<context:component-scan  base-package="com.xxx.component"  resource-pattern="autowire/*.class"/>
           

[4]包含與排除

●context:include-filter子節點表示要包含的目标類

注意:通常需要與use-default-filters屬性配合使用才能夠達到“僅包含某些元件”這樣的效果。即:通過将use-default-filters屬性設定為false,禁用預設過濾器, 然後掃描的就隻是include-filter中的規則指定的元件了。

●context:exclude-filter子節點表示要排除在外的目标類

●component-scan下可以擁有若幹個include-filter和exclude-filter子節點

@Autowired注解,預設情況下,所有使用@Autowired注解的屬性都需要被設定。當Spring找不到比對的bean裝配屬性時,會抛出異常。若某一屬性允許不被設定,可以設定@Autowired注解的required屬性為 false。如果bean的id值不相同,通過類型的自動裝配将無法工作,此時可以在@Qualifier注解裡提供bean的名稱。

Spring還支援@Resource注解和@Inject注解,三個注解的使用功能類似。

繼續閱讀