@Repository 存儲(chǔ)層Bean
首先使用 @Repository 將 DAO 類聲明為 Bean
package bookstore.dao;
@Repository
public class UserDaoImpl implements UserDao{ …… }
其次,在xml配置文件中啟動(dòng)Spring的自動(dòng)掃描功能、
<beans … >
……
<context:component-scan base-package=”bookstore.dao” />
……
</beans>
效果
如此,我們就不再需要在 XML 中顯式使用 <bean/> 進(jìn)行Bean 的配置。
Spring 在容器初始化時(shí)將**自動(dòng)掃描 base-package 指定的包及其子包下的所有 class文件,所有標(biāo)注了 @Repository 的類都將被注冊(cè)為 Spring Bean。
為什么 @Repository 只能標(biāo)注在 DAO 類上呢?這是因?yàn)樵撟⒔獾淖饔貌恢皇菍㈩愖R(shí)別為Bean?
同時(shí)它還能將所標(biāo)注的類中拋出的數(shù)據(jù)訪問異常封裝為 Spring 的數(shù)據(jù)訪問異常類型。
Spring本身提供了一個(gè)豐富的并且是與具體的數(shù)據(jù)訪問技術(shù)無關(guān)的數(shù)據(jù)訪問異常結(jié)構(gòu),用于封裝不同的持久層框架拋出的異常,使得異常獨(dú)立于底層的框架。
@Component **
是一個(gè)泛化的概念,僅僅表示一個(gè)組件** (Bean) ,可以作用在任何層次。
@Service 業(yè)務(wù)層Bean :
通常作用在業(yè)務(wù)層,但是目前該功能與 @Component 相同。
@Controller 展示層Bean
通常作用在控制層,但是目前該功能與 @Component 相同。
通過在類上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring會(huì)自動(dòng)創(chuàng)建相應(yīng)的 BeanDefinition 對(duì)象,并注冊(cè)到 ApplicationContext 中。
這些類就成了 Spring受管組件。這三個(gè)注解除了作用于不同軟件層次的類,其使用方式與 @Repository 是完全相同的。
對(duì)于包含 name 屬性的 @Component、@Repository、 @Service 和@Controller,會(huì)把 name 取值作為 Bean 的名字。如果這個(gè)注解不包含 name值或是其他被自定義過濾器發(fā)現(xiàn)的組件,默認(rèn) Bean 名稱會(huì)是小寫開頭的非限定類名。
**@Autowired **
最后,說說 @Autowired Spring 2.5 引入了 @Autowired 注釋,它可以對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。 通過 @Autowired的使用來消除 set ,get方法。
package com.baobaotao;
public class Boss {
// 省略 get/setter
@Autowired
private Car car;
@Autowired
private Office office;
@Override
public String toString() {
return "car:" + car + "/n" + "office:" + office;
}
}