亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Spring依賴注入

系統(tǒng) 1907 0

轉(zhuǎn)自: http://ganshisheng.iteye.com/blog/438608

一、依賴注入(DI)簡介
依賴注入背后的基本原理是對(duì)象之間的依賴關(guān)系,可以通過以下幾種方式來實(shí)現(xiàn):構(gòu)造器的參數(shù)、工廠方法的參數(shù),或給由構(gòu)造函數(shù)或者工廠方法創(chuàng)建的對(duì)象設(shè)置屬性。因此,容器的工作就是創(chuàng)建bean時(shí)注入那些依賴關(guān)系。相對(duì)于由bean自己來控制其實(shí)例化、直接在構(gòu)造器中指定依賴關(guān)系或者類似服務(wù)定位器模式這3種自主控制依賴關(guān)系注入的方法來說,控制從根本上發(fā)生了倒轉(zhuǎn),這也正是控制反轉(zhuǎn)名字的由來。

依賴注入主要有兩種注入方式,即構(gòu)造器注入和Setter注入。

1、構(gòu)造器注入
基于構(gòu)造器的依賴注入是通過調(diào)用帶參數(shù)的構(gòu)造器來實(shí)現(xiàn),每個(gè)參數(shù)代表著一個(gè)依賴。下面展示了用構(gòu)造器參數(shù)來注入依賴關(guān)系的例子。

先創(chuàng)建一個(gè)對(duì)象(bean)

Java代碼 收藏代碼
  1. public class HelloWorld{
  2. private Stringmsg;
  3. //需要一個(gè)默認(rèn)無參構(gòu)造器
  4. public HelloWorld(){}
  5. public HelloWorld(Stringmsg){
  6. this .msg=msg;
  7. }
  8. public StringgetMsg(){
  9. return msg;
  10. }
  11. public void setMsg(Stringmsg){
  12. this .msg=msg;
  13. }
  14. }


再修改配置文件applicationContext.xml,實(shí)例化bean

Java代碼 收藏代碼
  1. <beanid= "hello" class = "com.spring.demo.HelloWorld" >
  2. <constructor-argindex= "0" >
  3. <value>HelloWorld!</value>
  4. </constructor-arg>
  5. </bean>


最后測試是否能夠得到注入的bean,并打印出對(duì)象的屬性。
Java代碼 收藏代碼
  1. public static void main(String[]args){
  2. //讀取配置文件,獲得BeanFactory
  3. ApplicationContextcontext= new ClassPathXmlApplicationContext( "applicationContext.xml" );
  4. BeanFactoryfactory=context;
  5. HelloWorldhello=(HelloWorld)factory.getBean( "hello" );
  6. System.out.println(hello.getMsg());
  7. }


2、Setter注入
通過調(diào)用無參構(gòu)造器或無參static工廠方法實(shí)例化bean之后,調(diào)用該bean的setter方法,即可實(shí)現(xiàn)基于setter的依賴注入。

創(chuàng)建一個(gè)對(duì)象

Java代碼 收藏代碼
  1. public class HelloWorld{
  2. private Stringmsg;
  3. public StringgetMsg(){
  4. return msg;
  5. }
  6. public void setMsg(Stringmsg){
  7. this .msg=msg;
  8. }
  9. }


修改配置文件applicationContext.xml,實(shí)例化bean

Java代碼 收藏代碼
  1. <beanid= "helloBean" class = "com.spring.demo.HelloWorld" >
  2. <propertyname= "msg" value= "HelloWorld!" />
  3. </bean>


測試類,獲得注入的bean

Java代碼 收藏代碼
  1. public static void main(String[]args){
  2. //讀取配置文件,實(shí)例化IOC容器
  3. ApplicationContextcontext= new ClassPathXmlApplicationContext( "applicationContext.xml" );
  4. BeanFactoryfactory=context;
  5. HelloWorldhello=(HelloWorld)factory.getBean( "helloBean" );
  6. System.out.println(hello.getMsg());
  7. }

3. 接口注入( 不推薦


處理bean依賴關(guān)系通常按以下步驟進(jìn)行:

1.根據(jù)定義bean的配置創(chuàng)建并初始化BeanFactory實(shí)例

2.每個(gè)bean的依賴將以屬性、構(gòu)造器參數(shù)、或靜態(tài)工廠方法參數(shù)的形式出現(xiàn)。當(dāng)這些bean被實(shí)際創(chuàng)建時(shí),這些依賴也將會(huì)提供給該bean。

3.每個(gè)屬性或構(gòu)造器參數(shù)既可以是一個(gè)實(shí)際的值,也可以是對(duì)該容器中另一個(gè)bean的引用。

4.每個(gè)指定的屬性或構(gòu)造器參數(shù)值必須能夠被轉(zhuǎn)換成特定的格式或構(gòu)造參數(shù)所需的類型。

Spring會(huì)在容器被創(chuàng)建時(shí)驗(yàn)證容器中每個(gè)bean的配置,包括驗(yàn)證那些bean所引用的屬性是否指向一個(gè)有效的bean。在bean被實(shí)際創(chuàng)建之前,bean的屬性并不會(huì)被設(shè)置。伴隨著bean被實(shí)際創(chuàng)建,作為該bean的依賴bean以及依賴bean的依賴bean也將被創(chuàng)建和分配。

Spring依賴注入


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 成人精品一区二区www | 99精品国产成人a∨免费看 | 老司机午夜性大片免费 | 99热久久精里都是精品66 | 精品视频久久久 | 国产成人高清亚洲一区91 | 欧洲一级黄色片 | 999久久久精品视频在线观看 | 老司机福利在线播放 | 亚洲在线观看视频 | 亚洲综合色婷婷中文字幕 | 国产综合视频 | 久久国产精品免费一区二区三区 | 色资源站 | 亚州毛色毛片免费观看 | 日本不卡视频网站 | 一级特黄a免费大片 | 久久精品国产欧美日韩99热 | 日本一级毛片免费播 | 成人私人影院在线版 | 国产精品久久久久久久久久妇女 | 日本aaaa | 日本爱爱视频网站 | 国产精品麻豆a啊在线观看 国产精品麻豆高清在线观看 | 中国产一级毛片 | 国产一区二区三区四区 | www.久久综合| 欧美一级大片在线观看 | 青久草视频 | 亚洲精品第一页中文字幕 | 五月天丁香婷婷综合 | 国产伦精品一区二区三区网站 | 久久精品视频18 | 中文字幕亚洲综合久久男男 | 亚洲成年网 | 亚洲精品456 | 亚洲狠狠婷婷综合久久久久 | 亚洲综合一区二区精品久久 | 久久综合狠狠综合久久 | 国产一区二区三区毛片 | 亚洲字幕久久 |