亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring常用注解 使用注解來構造IoC容器的方法

2024-07-13 10:16:22
字體:
來源:轉載
供稿:網友

使用注解來構造IoC容器

用注解來向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【@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對象

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;

注意:在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就主動注入給他。

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;

@Resource、@AutoWired、@Qualifier 都用來注入對象。其中@Resource可以以 name 或 type 方式注入,@AutoWired只能以 type 方式注入,@Qualifier 只能以 name 方式注入。

但它們有一些細微區別:

1、@Resource、@Qualifier默認按 byName自動注入,@Autowired默認按byType自動注入。

2、@Resource有兩個屬性是比較重要的,分是name和type。如果使用name屬性,則使用byName的自動注入策略。而使用type屬性時則使用byType自動注入策略。

3、@Resources是JDK提供的注解,而@Autowired是Spring提供的注解。

可以把 @Resource 當成 @AutoWired @Qualifier 的老大吧,哈哈。你們有的,我都有,你們沒有的,我也有~

@Resource、@AutoWired、@Qualifier 都用來注入對象。其中@Resource可以以 name 或 type 方式注入,@AutoWired只能以 type 方式注入,@Qualifier 只能以 name 方式注入。

但它們有一些細微區別:

1、@Resource、@Qualifier默認按 byName自動注入,@Autowired默認按byType自動注入。

2、@Resource有兩個屬性是比較重要的,分是name和type。如果使用name屬性,則使用byName的自動注入策略。而使用type屬性時則使用byType自動注入策略。

3、@Resources是JDK提供的注解,而@Autowired是Spring提供的注解。

可以把 @Resource 當成 @AutoWired @Qualifier 的老大吧,哈哈。你們有的,我都有,你們沒有的,我也有~

以上這篇Spring常用注解 使用注解來構造IoC容器的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精美色品网站| 欧美午夜电影在线| 一区二区三区视频在线| 国产精品一区二区3区| 亚洲国产免费av| 国产91在线播放精品91| 色先锋久久影院av| 国产亚洲精品91在线| 中文字幕日韩在线播放| 欧美xxxx18性欧美| 日韩精品福利网站| 国产精品国模在线| 国产精品视频免费在线| 欧美寡妇偷汉性猛交| 欧美最顶级丰满的aⅴ艳星| 色悠久久久久综合先锋影音下载| 91精品久久久久久久久久久| 日韩久久精品成人| 琪琪第一精品导航| 欧美精品18videos性欧美| 一区二区在线视频播放| 国产一区二区香蕉| 欧美黄色免费网站| 国产a∨精品一区二区三区不卡| 日av在线播放中文不卡| 欧美极品在线视频| 日韩av免费一区| www.欧美精品| 国产精品免费在线免费| 中国china体内裑精亚洲片| 国产精品美女视频网站| 日韩成人在线观看| 久久精视频免费在线久久完整在线看| 欧美视频免费在线| 欧美日韩久久久久| 两个人的视频www国产精品| 亚洲韩国日本中文字幕| 午夜剧场成人观在线视频免费观看| 九九久久精品一区| 亚洲日本中文字幕| 懂色av影视一区二区三区| 一区二区三区回区在观看免费视频| 久久人人97超碰精品888| 久久成人人人人精品欧| 日韩在线视频观看| 国产成人jvid在线播放| 久久精品中文字幕电影| 亚洲激情视频在线| 清纯唯美亚洲综合| 亚洲精品456在线播放狼人| 日韩中文字幕视频在线观看| 欧美成人免费网| 国产精品一区专区欧美日韩| 国产精品网红直播| 久久精品国产v日韩v亚洲| 成人国产在线视频| 国产欧美日韩精品专区| 欧美日韩第一视频| 久久免费成人精品视频| 久久久国产精彩视频美女艺术照福利| 欧美人与性动交a欧美精品| 国语自产精品视频在线看抢先版图片| 91大神在线播放精品| 国产中文字幕日韩| 亚洲精品一区久久久久久| 国产精品一二三视频| 欧美激情在线视频二区| 欧美电影免费看| 成人av在线亚洲| 亚洲a∨日韩av高清在线观看| 国产精品一区二区女厕厕| 91精品国产高清久久久久久| 91牛牛免费视频| 米奇精品一区二区三区在线观看| 中文字幕日韩专区| 国产成人精品优优av| 91av在线免费观看| 国产在线一区二区三区| 欧美激情一区二区三区成人| 亚洲伊人一本大道中文字幕| 亚洲韩国日本中文字幕| 久久久亚洲国产天美传媒修理工| 亚洲香蕉成人av网站在线观看| 日韩高清电影免费观看完整版| 久久福利网址导航| 亚洲春色另类小说| 欧美亚洲国产精品| 久久精品国产综合| 超碰日本道色综合久久综合| 国产综合视频在线观看| 亚洲欧美国产精品专区久久| 亚洲精品久久久久久下一站| 久久韩国免费视频| 国产日韩av在线| 国产精品v日韩精品| 欧美性猛交xxxx久久久| 国产亚洲xxx| 久久久国产精品免费| 国产成人avxxxxx在线看| 国产成人精品在线| 欧美日本在线视频中文字字幕| 国产欧美日韩中文字幕| 精品调教chinesegay| 欧美极品少妇xxxxⅹ裸体艺术| 大桥未久av一区二区三区| 最新国产精品拍自在线播放| 亚洲国产欧美日韩精品| 亚洲精品久久7777777| 国产精品久久久久久五月尺| 日本午夜人人精品| 亚洲在线视频观看| 日韩综合视频在线观看| 一本大道香蕉久在线播放29| 国产精品色婷婷视频| 精品久久久国产精品999| 国产精品香蕉在线观看| 久久久久久成人| 日本精品久久中文字幕佐佐木| 97在线视频一区| 日韩精品视频免费专区在线播放| 欧美日韩国产va另类| 91免费欧美精品| 欧美成人一区在线| 国产精品老女人视频| 亚洲在线观看视频网站| 欧美日韩国产中文字幕| 97久久超碰福利国产精品…| 国产一区二区丝袜| 久久中文字幕在线| 亚洲成av人乱码色午夜| 91欧美精品午夜性色福利在线| 91av在线免费观看| 国产精品久久久久久av福利软件| 亚洲国产精品成人av| 日韩一区视频在线| 欧美日韩国产色视频| 亚洲高清免费观看高清完整版| 亚洲97在线观看| 国产精品美女久久| 久久精品国产欧美亚洲人人爽| 久久久久999| 亚洲精品国偷自产在线99热| 日韩在线视频免费观看高清中文| 色综合色综合久久综合频道88| 亚洲福利在线播放| 亚洲激情中文字幕| 911国产网站尤物在线观看| 国产91亚洲精品| 欧洲成人免费aa| 欧美大片免费观看在线观看网站推荐| 欧美黄色免费网站| 国产va免费精品高清在线观看| 亚洲国模精品私拍| 国产亚洲精品久久久优势| 影音先锋欧美精品| 国产精品欧美在线| 92看片淫黄大片看国产片| 日韩在线免费高清视频| 成人xxxx视频| 久久影视电视剧免费网站清宫辞电视| 亚洲欧美精品中文字幕在线| 亚洲欧美日韩在线高清直播| 一本一本久久a久久精品综合小说| 国产免费一区二区三区在线能观看|