真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spring之DI深入理解

本篇內(nèi)容主要講解“Spring之DI深入理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Spring之DI深入理解”吧!

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司一直秉承“誠信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,成都做網(wǎng)站、網(wǎng)站制作,塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。

DI概念

IoC 其實(shí)有兩種方式,一種就是 DI(Dependency Injection) ,而另一種是 DL(Dependency  Lookup)即依賴查找。前者是當(dāng)前組件被動接受IoC容器注入的依賴組件,而后者則是組件主動去某個服務(wù)注冊地查找其依賴的組件,我們這里重點(diǎn)介紹DI。

IoC的一個重點(diǎn)是在系統(tǒng)運(yùn)行中,動態(tài)的向某個對象提供它所需要的其他對象。這一點(diǎn)是通過DI來實(shí)現(xiàn)的。比如對象A需要操作數(shù)據(jù)庫,以前我們總是要在A中自己編寫代碼來獲得一個Connection對象,有了spring我們就只需要告訴spring,A中需要一個Connection,至于這個Connection怎么構(gòu)造,何時構(gòu)造,A不需要知道。通過依賴注入機(jī)制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標(biāo)需要的資源,完成自身的業(yè)務(wù)邏輯,而不需要關(guān)心具體的資源來自何處,由誰實(shí)現(xiàn)。在系統(tǒng)運(yùn)行時,spring會在適當(dāng)?shù)臅r候制造一個Connection,然后像打針一樣,注射到A當(dāng)中,這樣就完成了對各個對象之間關(guān)系的控制。A需要依賴Connection才能正常運(yùn)行,而這個Connection是由spring注入到A中的,依賴注入的名字就這么來的。Spring是通過反射技術(shù)實(shí)現(xiàn)注入的,它允許程序在運(yùn)行的時候動態(tài)的生成對象、執(zhí)行對象的方法、改變對象的屬性。

簡單的總結(jié)一下依賴注入:

  • 依賴 : 指Bean對象的創(chuàng)建依賴于容器 。

  • 注入 : 指Bean對象所依賴的資源 , 由容器來設(shè)置和裝配。

注入的方式主要包括Setter注入(重點(diǎn))、構(gòu)造器注入和參數(shù)直接注入。還有拓展方式注入,即:p命名空間注入和c命名空間注入,這里就不再展開介紹了,有興趣的同學(xué)可以自行研究。

Setter注入

IoC 容器使用 setter 方法注入被依賴的實(shí)例。通過調(diào)用無參構(gòu)造器或無參 static 工廠方法實(shí)例化 bean 后,調(diào)用該 bean的setter  方法(類中必須有屬性的set方法),即可實(shí)現(xiàn)基于setter的DI

代碼如下:

  1. public class Address { 

  2.     private String address; 

  3.     public String getAddress() { 

  4.         return address; 

  5.     } 

  6.     public void setAddress(String address) { 

  7.         this.address = address; 

  8.     } 


import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class Student {     private String name;     private Address address;     private String[] books;     private List hobbys;     private Map card;     private Set games;     private String wife;     private Properties info;     public void setName(String name) {         this.name = name;     }     public String getName() {        return this.name;     }     public void setAddress(Address address) {         this.address = address;     }    public void setBooks(String[] books) {         this.books = books;     }     public void setHobbys(List hobbys) {         this.hobbys = hobbys;     }     public void setCard(Map card) {         this.card = card;     }     public void setGames(Set games) {         this.games = games;     }     public void setWife(String wife) {         this.wife = wife;     }     public void setInfo(Properties info) {         this.info = info;     }     public void show(){         System.out.println("name="+ name                 +",address="+ address.getAddress()                 +",books="         );         for (String book:books){             System.out.print("<<"+book+">>\t");         }         System.out.println("\nhobbys:"+hobbys);         System.out.println("card:"+card);         System.out.println("games:"+games);         System.out.println("wife:"+wife);         System.out.println("info:"+info);     } }

配置文件

        

配置文件中把name 賦值為小明,即完成了對代碼 private String name的注入。

測試類

public static void main(String[] args) {            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");            Student student=(Student)context.getBean("student");            System.out.println(student.getName());         }

運(yùn)行結(jié)果,輸出:小明

常見注入方式的xml 配置如下:

bean注入

使用ref進(jìn)行引入其他bean

            

數(shù)組注入

                        數(shù)學(xué)              語文              英語               

List注入

                聽歌          看電影          打游戲         

Map注入

                                  

set注入

                CS          斗地主          消消樂        

Null注入

Properties注入

                123456          男          小明        

測試方法

public static void main(String[] args) {            ApplicationContextcontext = new ClassPathXmlApplicationContext("bean1.xml");            Studentstudent=(Student)context.getBean("student");            student.show();          }

運(yùn)行結(jié)果,輸出:

name=小明,address=北京,books=

<<數(shù)學(xué)>> <<語文>> <<英語>>

hobbys:[聽歌, 看電影, 打游戲]

card:{招行=123456789, 工行=987654321}

games:[CS, 斗地主, 消消樂]

wife:null

info:{學(xué)號=123456, 性別=男, 姓名=小明}

構(gòu)造器注入

指IoC 容器使用構(gòu)造方法注入被依賴的實(shí)例?;跇?gòu)造器的 DI 通過調(diào)用帶參數(shù)的構(gòu)造方法實(shí)現(xiàn),每個參數(shù)代表一個依賴。

代碼如下:

public class Student2{        private String name;        public Student2(String name) {           this.name = name;       }        public void setName(String name) {           this.name = name;       }        public void show(){           System.out.println("name="+ name );       }     }

配置文件中設(shè)置

                             

測試代碼

public static void main(String[] args) {            ApplicationContextcontext = new ClassPathXmlApplicationContext("bean3.xml");                   Student2 user = (Student2) context.getBean("student1")            user.show();         }

運(yùn)行結(jié)果:

name=kevin1

參數(shù)直接注入

主要通過注解@Autowired、@Qualifier和@Resource來實(shí)現(xiàn)

@Autowired

@Autowired是按類型自動轉(zhuǎn)配的,不支持id匹配。

需要導(dǎo)入 spring-aop的包

配置文件中設(shè)置<

context:annotation-config/>

代碼:

public class Animal {    @Autowired    private Cat cat; //運(yùn)行時spring通過DI會把Cat類實(shí)例化    @Autowired private Dog dog;//運(yùn)行時spring通過DI會把Dog類實(shí)例化           public void printCatshot() {               cat.shout();        }           public void printDogshot() {                 dog.shout(); } }

 @Qualifier

@Autowired是根據(jù)類型進(jìn)行自動裝配的。如果當(dāng)Spring上下文中存在一個類型的不同bean時,就會拋出BeanCreationException異常;我們可以使用@Qualifier配合@Autowired來解決這些問題。

代碼:

@Autowired @Qualifier(value= "dog1") private Dog dog1; beans.xml  

 @Resource

@Resource是J2EE提供的, 需導(dǎo)入Package: javax.annotation.Resource;

@Resource如有指定的name屬性,先按該屬性進(jìn)行byName方式查找裝配,其次再進(jìn)行默認(rèn)的byName方式進(jìn)行裝配,都不成功,則報異常。

代碼

@Resource(name = "dog2") private Dog dog; beans.xml  

 最簡單的解釋

IoC通過DI技術(shù)主要實(shí)現(xiàn)了以下兩點(diǎn):

  • 在系統(tǒng)運(yùn)行中,動態(tài)地向某個對象提供它所需要的其他對象;

  • 在系統(tǒng)運(yùn)行中,動態(tài)地從配置文件中讀取數(shù)據(jù)來為對象的屬性進(jìn)行賦值。

到此,相信大家對“Spring之DI深入理解”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站題目:Spring之DI深入理解
URL網(wǎng)址:http://weahome.cn/article/gohooc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部