Spring中常用注解的詳細(xì)介紹
spring中使用注解時(shí)配置文件的寫法:
<?xml version="1.0" encoding="UTF-8"?> <span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <aop:aspectj-autoproxy/> <context:annotation-config/> <context:component-scan base-package="com.test" /> </beans>
<context:component-scan />配置項(xiàng)就配置了對(duì)指定的包進(jìn)行掃描,以實(shí)現(xiàn)依賴注入。
下面介紹下一些常見(jiàn)注解的使用:
@Autowired private IReportService reportService ;
Spring2.5引入了@Autowired注解,它可以對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。另外,通過(guò)@Autowired可以消除get,set方法。@Autowired是根據(jù)類型進(jìn)行自動(dòng)轉(zhuǎn)配的。
這里要注意@Resource也可以實(shí)現(xiàn)自動(dòng)裝配,但是@Resource默認(rèn)是按照名稱進(jìn)行自動(dòng)裝配。
這里簡(jiǎn)單介紹下什么是按類型進(jìn)行裝配,什么是按名稱進(jìn)行裝配?
所謂按類型,就是當(dāng)Spring容器中存在一個(gè)與指定屬性類型相同的bean,那么將該屬性進(jìn)行自動(dòng)裝配;如果存在多個(gè)該類型的bean,那么跑出異常,并指出不能使用按類型進(jìn)行自動(dòng)裝配;如果沒(méi)有找到匹配的bean,則什么事都不發(fā)生。
所謂按名稱,即根據(jù)屬性名進(jìn)行自動(dòng)裝配,此項(xiàng)會(huì)檢查Spring容器中與該屬性名完全一致的的bean,進(jìn)行自動(dòng)裝配。
@Component("reportAction") @Scope("request") public class ReportAction extends AbstractBaseAction
@Component注解(下面的解釋來(lái)自官方文檔)
@Component、@Service和@Controller。@Component是所有受Spring管理組件的通用形式;
而@Repository、@Service和@Controller則是@Component的細(xì)化, 用來(lái)表示更具體的用例(例如,分別對(duì)應(yīng)了持久化層、服務(wù)層和表現(xiàn)層)。也就是說(shuō), 你能用@Component來(lái)注解你的組件類,
但如果用@Repository、@Service 或@Controller來(lái)注解它們,你的類也許能更好地被工具處理,或與切面進(jìn)行關(guān)聯(lián)。
例如,這些典型化注解可以成為理想的切入點(diǎn)目標(biāo)。當(dāng)然,在Spring Framework以后的版本中,@Repository、@Service和@Controller也許還能攜帶更多語(yǔ)義。如此一來(lái),如果你正在考慮服務(wù)層中是該用@Component還是@Service,
那@Service顯然是更好的選擇。同樣的,就像前面說(shuō)的那樣,@Repository已經(jīng)能在持久化層中進(jìn)行異常轉(zhuǎn)換時(shí)被作為標(biāo)記使用了。
@Scope()指定的是bean的作用域
@Scope("prototype")注解
Spring容器在進(jìn)行輸出prototype類型的對(duì)象時(shí),會(huì)每次重新生成一個(gè)新的對(duì)象給請(qǐng)求方,雖然這種類型的對(duì)象的實(shí)例化以及屬性設(shè)置都是由Spring容器來(lái)完成的,但是只要準(zhǔn)備完畢,并且對(duì)象實(shí)例返回給請(qǐng)求方的之后,容器就不會(huì)再持有當(dāng)前對(duì)象的引用,請(qǐng)求方需要自己來(lái)當(dāng)前對(duì)象后繼生命周期的管理,包括該對(duì)象的銷毀。最典型的案例就是Spring容器和Struts2進(jìn)行整合時(shí),要將action的scope的改成prototype。
@Scope("singleton")注解
此取值表示容器中只存在一個(gè)實(shí)例,所有引用該bean都是單一實(shí)例。這個(gè)就是典型的單例模型。
@Scope("request")注解
<bean id="requestPrecessor" class=".....RequestPrecessor" scope ="request" />
Spring容器,即XmlWebApplicationContext回為每一個(gè)全新的RequestPrecessor,當(dāng)請(qǐng)求結(jié)束后,該對(duì)象的生命周期即結(jié)束。當(dāng)有100個(gè)Http請(qǐng)求同時(shí)發(fā)出時(shí),容器會(huì)分別對(duì)每個(gè)請(qǐng)求創(chuàng)建不同的RequestPrecessor實(shí)例,它們之間不相互干擾,簡(jiǎn)單來(lái)講,request可以看做是prototype的特例,request的應(yīng)用場(chǎng)景更具體點(diǎn),其他基本沒(méi)啥區(qū)別。
@Scope("session")注解
對(duì)于Web應(yīng)用來(lái)說(shuō),放在session中最多的就是用戶的登錄信息,對(duì)于放在session中的信息,可以將其scope的類型改為session,Spring容器會(huì)為每個(gè)獨(dú)立的session創(chuàng)建屬于自己的全新的UserPreference實(shí)例,比request類型的bean存活更長(zhǎng)的時(shí)間,,其他方面基本沒(méi)啥區(qū)別,類似于javaweb中的session。
最后,說(shuō)一下為什么@Respository只能標(biāo)注在Dao層,這是因?yàn)镾pring提供的這個(gè)注解不僅將類識(shí)別為Bean,同時(shí)它能將所
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
JSP開(kāi)發(fā)入門(二)----JSP語(yǔ)法的基本原理
JSP開(kāi)發(fā)入門(二)----JSP語(yǔ)法的基本原理...2006-10-10JSP數(shù)據(jù)庫(kù)操作例程(Use Bean)
JSP數(shù)據(jù)庫(kù)操作例程(Use Bean)...2006-10-10利用JSP session對(duì)象保持住登錄狀態(tài)
這篇文章主要為大家詳細(xì)介紹了如何利用JSP session對(duì)象保持住登錄狀態(tài),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05jsp有兩個(gè)按鈕來(lái)控制Timer的開(kāi)始和結(jié)束方法
下面小編就為大家?guī)?lái)一篇jsp有兩個(gè)按鈕來(lái)控制Timer的開(kāi)始和結(jié)束方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03java去掉html標(biāo)簽 必須首先去掉雙引號(hào)的正則
java去掉html標(biāo)簽 必須首先去掉雙引號(hào)的實(shí)現(xiàn)方法,代碼如下2008-09-09基于JSP的動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)技術(shù)
基于JSP的動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)技術(shù)...2006-10-10Spring組件自動(dòng)掃描詳解及實(shí)例代碼
這篇文章主要介紹了Spring組件自動(dòng)掃描詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02