最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年01月10日 14:25:55   作者:refree_sci  
下面小編就為大家分享一篇Spring常用注解 使用注解來構造IoC容器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

使用注解來構造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"),這樣只會創(chuàng)建一個Action對象,每次訪問都是同一Action對象,數據不安全,struts2 是要求每次次訪問都對應不同的Action,scope="prototype" 可以保證當有請求的時候都創(chuàng)建一個Action對象

3、@ Service

@Service對應的是業(yè)務層Bean,例如:

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

@Service("userService")注解是告訴Spring,當Spring要創(chuàng)建UserServiceImpl的的實例時,bean的名字必須叫做"userService",這樣當Action需要使用UserServiceImpl的的實例時,就可以由Spring創(chuàng)建好的"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就會把自己創(chuàng)建好的名字叫做"userService"的UserServiceImpl的實例注入給Action中的“userService”變量,幫助Action完成userService的實例化,這樣在Action中就不用通過“UserService userService = new UserServiceImpl();”這種最原始的方式去實例化userService了。

如果沒有Spring,那么當Action需要使用UserServiceImpl時,必須通過“UserService userService = new UserServiceImpl();”主動去創(chuàng)建實例對象,但使用了Spring之后,Action要使用UserServiceImpl時,就不用主動去創(chuàng)建UserServiceImpl的實例了,創(chuàng)建UserServiceImpl實例已經交給Spring來做了,Spring把創(chuàng)建好的UserServiceImpl實例給Action,Action拿到就可以直接用了。

Action由原來的主動創(chuàng)建UserServiceImpl實例后就可以馬上使用,變成了被動等待由Spring創(chuàng)建好UserServiceImpl實例之后再注入給Action,Action才能夠使用。

這說明Action對“UserServiceImpl”類的“控制權”已經被“反轉”了,原來主動權在自己手上,自己要使用“UserServiceImpl”類的實例,自己主動去new一個出來馬上就可以使用了,但現在自己不能主動去new“UserServiceImpl”類的實例,new“UserServiceImpl”類的實例的權力已經被Spring拿走了,只有Spring才能夠new“UserServiceImpl”類的實例,而Action只能等Spring創(chuàng)建好“UserServiceImpl”類的實例后,再“懇求”Spring把創(chuàng)建好的“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創(chuàng)建一個名字叫“userDao”的UserDaoImpl實例。

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

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

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

但它們有一些細微區(qū)別:

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 方式注入。

但它們有一些細微區(qū)別:

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

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

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

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

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

相關文章

  • Mybatis中 SQL語句復用

    Mybatis中 SQL語句復用

    這篇文章主要介紹了Mybatis中 SQL語句復用,需要的朋友可以參考下
    2017-03-03
  • 微信小程序 springboot后臺如何獲取用戶的openid

    微信小程序 springboot后臺如何獲取用戶的openid

    這篇文章主要介紹了微信小程序 springboot后臺如何獲取用戶的openid,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 詳解Java中CountDownLatch異步轉同步工具類

    詳解Java中CountDownLatch異步轉同步工具類

    今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著CountDownLatch異步轉同步工具類展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java面試題沖刺第十八天--Spring框架3

    Java面試題沖刺第十八天--Spring框架3

    這篇文章主要為大家分享了最有價值的三道關于Spring框架的面試題,涵蓋內容全面,包括數據結構和算法相關的題目、經典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Netty中的DelimiterBasedFrameDecoder使用方法詳解

    Netty中的DelimiterBasedFrameDecoder使用方法詳解

    這篇文章主要介紹了Netty中的DelimiterBasedFrameDecoder使用方法詳解,DelimiterBasedFrameDecoder與LineBasedFrameDecoder類似,只不過更加通用,允許我們指定任意特殊字符作為分隔符,我們還可以同時指定多個分隔符,需要的朋友可以參考下
    2023-12-12
  • java7改善后的異常處理

    java7改善后的異常處理

    在本篇文章里小編給大家整理的是關于java7改善后的異常處理知識點總結,有需要的朋友們參考下。
    2019-11-11
  • Java中使用輾轉相除法求最大公約數

    Java中使用輾轉相除法求最大公約數

    這篇文章主要介紹了Java中使用輾轉相除法求最大公約數,本文直接給出代碼實例,需要的朋友可以參考下
    2015-05-05
  • java中類和對象的知識點總結

    java中類和對象的知識點總結

    在本篇文章里小編給大家整理了一篇關于java中類和對象的知識點總結,有需要的朋友們可以學習下。
    2020-12-12
  • 15個高級Java多線程面試題及回答

    15個高級Java多線程面試題及回答

    這篇文章主要介紹了15個高級Java多線程面試題及回答,翻譯自國外的一篇文章,這些面試題容易混淆、較難回答,需要的朋友可以參考下吧
    2014-05-05
  • SpringBoot整合ZXing實現二維碼和條形碼的創(chuàng)建

    SpringBoot整合ZXing實現二維碼和條形碼的創(chuàng)建

    如今我們越來越多的東西需要用到二維碼或者條形碼,商品的條形碼,付款的二維碼等等,所以本文小編給大家介紹了SpringBoot整合ZXing實現二維碼和條形碼的創(chuàng)建,文章通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論

贵阳市| 全州县| 炉霍县| 黄冈市| 佛坪县| 大化| 台东县| 繁峙县| 辽中县| 高平市| 晋州市| 汉沽区| 山西省| 临潭县| 乌苏市| 青神县| 名山县| 建始县| 云浮市| 义马市| 新闻| 大关县| 宁阳县| 灵石县| 广安市| 辽宁省| 乐山市| 青浦区| 得荣县| 霍林郭勒市| 天津市| 浦城县| 肥西县| 且末县| 图们市| 共和县| 绥化市| 青神县| 岐山县| 舒兰市| 登封市|