用註解來向spring容器註冊bean中註冊****。
如:在base-package指明乙個包
1
表明cn.gacl.j**a包及其子包中,如果某個類的頭上帶有特定的註解【@component/@repository/@service/@controller】,就會將這個物件作為bean註冊進spring容器。也可以在中指定多個包,如:
1
多個包逗號隔開。
@component
是所有受spring 管理元件的通用形式,@component註解可以放在類的頭上,@component不推薦使用。
@controller對應表現層的bean,也就是action,例如:
1 @controller
2 @scope("prototype")
3 public class useraction extends baseaction
使用@controller註解標識useraction之後,就表示要把useraction交給spring容器管理,在spring容器中會存在乙個名字為"useraction"的action,這個名字是根據useraction類名來取的。注意:如果@controller不指定其value【@controller】,則預設的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物件
@service對應的是業務層bean,例如:
1 @service("userservice")
2 public class userserviceimpl implements userservice
@service("userservice")註解是告訴spring,當spring要建立userserviceimpl的的例項時,bean的名字必須叫做"userservice",這樣當action需要使用userserviceimpl的的例項時,就可以由spring建立好的"userservice",然後注入給action:在action只需要宣告乙個名字叫「userservice」的變數來接收由spring注入的"userservice"即可,具體**如下:
1 // 注入userservice
2 @resource(name = "userservice")
3 private userservice userservice;
注意:在action宣告的「userservice」變數的型別必須是「userserviceimpl」或者是其父類「userservice」,否則由於型別不一致而無法注入,由於action中的宣告的「userservice」變數使用了@resource註解去標註,並且指明了其name = "userservice",這就等於告訴spring,說我action要例項化乙個「userservice」,你spring快點幫我例項化好,然後給我,當spring看到userservice變數上的@resource的註解時,根據其指明的name屬性可以知道,action中需要用到乙個userserviceimpl的例項,此時spring就會把自己建立好的名字叫做"userservice"的userserviceimpl的例項注入給action中的「userservice」變數,幫助action完成userservice的例項化,這樣在action中就不用通過「userservice userservice = new userserviceimpl();」這種最原始的方式去例項化userservice了。如果沒有spring,那麼當action需要使用userserviceimpl時,必須通過「userservice userservice = new userserviceimpl();」主動去建立例項物件,但使用了spring之後,action要使用userserviceimpl時,就不用主動去建立userserviceimpl的例項了,建立userserviceimpl例項已經交給spring來做了,spring把建立好的userserviceimpl例項給action,action拿到就可以直接用了。action由原來的主動建立userserviceimpl例項後就可以馬上使用,變成了被動等待由spring建立好userserviceimpl例項之後再注入給action,action才能夠使用。這說明action對「userserviceimpl」類的「控制權」已經被「反轉」了,原來主動權在自己手上,自己要使用「userserviceimpl」類的例項,自己主動去new乙個出來馬上就可以使用了,但現在自己不能主動去new「userserviceimpl」類的例項,new「userserviceimpl」類的例項的權力已經被spring拿走了,只有spring才能夠new「userserviceimpl」類的例項,而action只能等spring建立好「userserviceimpl」類的例項後,再「懇求」spring把建立好的「userserviceimpl」類的例項給他,這樣他才能夠使用「userserviceimpl」,這就是spring核心思想「控制反轉」,也叫「依賴注入」,「依賴注入」也很好理解,action需要使用userserviceimpl幹活,那麼就是對userserviceimpl產生了依賴,spring把acion需要依賴的userserviceimpl注入(也就是「給」)給action,這就是所謂的「依賴注入」。對action而言,action依賴什麼東西,就請求spring注入給他,對spring而言,action需要什麼,spring就主動注入給他。
@repository對應資料訪問層bean ,例如:
1 @repository(value="userdao")
2 public class userdaoimpl extends basedaoimpl
@repository(value="userdao")註解是告訴spring,讓spring建立乙個名字叫「userdao」的userdaoimpl例項。
當service需要使用spring建立的名字叫「userdao」的userdaoimpl例項時,就可以使用@resource(name = "userdao")註解告訴spring,spring把建立好的userdao注入給service即可。
1 // 注入userdao,從資料庫中根據使用者id取出指定使用者時需要用到
2 @resource(name = "userdao")
3 private basedaouserdao;
**: Spring 常見註解
configuration把乙個類作為乙個ioc容器,它的某個方法頭上如果註冊了 bean,就會作為這個spring容器中的bean。scope註解 作用域 lazy true 表示延遲初始化 service用於標註業務層元件 controller用於標註控制層元件 如struts中的action ...
Spring 常見註解
autowired 注釋,它可以對類成員變數 方法及建構函式進行標註,完成自動裝配的工作。通過 autowired的使用來消除 set get方法。在使用 autowired之前,我們對乙個bean配置起屬性時,是這用用的 通過這種方式來,配置比較繁瑣,而且 比較多。在spring 2.5 引入了 ...
Spring常見的註解說明
component service conctrl用於注入乙個類 autowired用於注入成員變數 方法 建構函式,它是通過byname方式經過依賴注入 transactional用於事務控制的注入 採用spring註解的時候要啟用spring的註解並要重寫sessionfactory 註解配置檔...