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注解,三個注解的使用功能類似。