Spring常用註解@Component、@Controller、@ Service、@ Repository......

部分轉載:http://www.cnblogs.com/xdp-gacl/p/3495887.html
1、Spring容器簡介
容器就是一個對於某種對象管理的綜合框架,容器管理着對象的生命週期,Spring容器可以幫助你管理所有的Bean對象,專業術語稱之爲IOC控制反轉。而在Spring中我們既可以通過xml文件配置來實現向容器註冊bean,也可以通過註解@Component、@Controller、@ Service、@ Repository來向容器註冊。

2、註解使用前準備工作
用註解來向Spring容器註冊Bean。需要在applicationContext.xml中註冊

<context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>。

如:在base-package指明一個包

<context:component-scan base-package="cn.gacl.java"/>

表明cn.gacl.java包及其子包中,如果某個類的頭上帶有特定的註解【@Component/@Repository/@Service/@Controller】,就會將這個對象作爲Bean註冊進Spring容器。也可以在
<context:component-scan base-package=” ”/>
中指定多個包,如:

<context:component-scan base-package="cn.gacl.dao.impl,cn.gacl.service.impl,cn.gacl.action"/>

多個包逗號隔開。

1、@Component
@Component
是所有受Spring 管理組件的通用形式,@Component註解可以放在類的頭上,@Component不推薦使用。

2、@Controller
@Controller對應控制層的Bean,也就是Action,例如:

 @Controller
 @Scope("prototype")
 public class UserAction extends BaseAction<User>{
 ……
 }

使用@Controller註解標識UserAction之後,就表示要把UserAction交給Spring容器管理,在Spring容器中會存在一個名字爲”userAction”的action,這個名字是根據UserAction類名來取的。

注意:如果@Controller不指定其value,則默認的bean名字爲這個類的類名首字母小寫,如果指定
value{@Controller(value="UserAction")}
或者
{@Controller("UserAction")}
則使用value作爲bean的名字。
這裏的UserAction還使用了@Scope註解,@Scope(“prototype”)表示將Action的範圍聲明爲原型,可以利用容器的scope=”prototype”來保證每一個請求有一個單獨的Action來處理,避免struts中Action的線程安全問題。spring 默認scope 是單例模式(scope=”singleton”),這樣只會創建一個Action對象,每次訪問都是同一Action對象,數據不安全,struts2 是要求每次次訪問都對應不同的Action,scope=”prototype” 可以保證當有請求的時候都創建一個Action對象。

3、@ Service
@Service對應的是業務層Bean,例如:

@Service("userService")
public class UserServiceImpl implements UserService {
……… }

@Service(“userService”)註解是告訴Spring,當Spring要創建UserServiceImpl的的實例時,bean的名字必須叫做”userService”,這樣當Action需要使用UserServiceImpl的的實例時,就可以由Spring創建好的”userService”,然後注入給Action:在Action只需要聲明一個名字叫“userService”的變量來接收由Spring注入的”userService”即可,具體代碼如下:

 // 注入userService
@Resource(name = "userService")
private UserService userService;

4、@ Repository
@Repository對應數據訪問層Bean ,例如:

 @Repository(value="userDao")
public class UserDaoImpl extends BaseDaoImpl<User> {
………
}

@Repository(value=”userDao”)註解是告訴Spring,讓Spring創建一個名字叫“userDao”的UserDaoImpl實例。

當Service需要使用Spring創建的名字叫“userDao”的UserDaoImpl實例時,就可以使用@Resource(name = “userDao”)註解告訴Spring,Spring把創建好的userDao注入給Service即可。

 // 注入userDao,從數據庫中根據用戶Id取出指定用戶時需要用到
 @Resource(name = "userDao")
 private BaseDao<User> userDao;

以上四個都是註冊bean使用的註解,與此同時Spring還提供了三個注入bean的註解,具體如下。

1、@Resource
@Resource可以以 name 或 type 方式注入,默認按 byName自動注入。@Resource有兩個屬性是比較重要的,分是name和type。如果使用name屬性,則使用byName的自動注入策略。而使用type屬性時則使用byType自動注入策略。其也是JDK提供的註解。

2、@AutoWired
@AutoWired只能以 type 方式注入,其是Spring提供的註解。

3、@Qualifier
@Qualifier 只能以 name 方式注入

推薦使用@Resource

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章