北大青鳥學(xué)校講解:Spring依賴的注入

      北京北大青鳥學(xué)校學(xué)術(shù)部提供:

      使用Spring,可以使用里面的控制反轉(zhuǎn)把依賴對象交給Spring管理,并把依賴對象通過容器注入到組件內(nèi)部。那么在Spring里面,該如何把對象注入到組件內(nèi)部呢?北京北大青鳥學(xué)校學(xué)術(shù)部丁老師講解:

      創(chuàng)建一個PersonDao對象,并把這個對象注入到PersonServiceBean中
      Java代碼
      1. package cn.accp.dao.impl;  
      2.  
      3. import cn.accp.dao.PersonDao;  
      4.  
      5. public class PersonDaoBean implements PersonDao {  
      6.     public void add(){  
      7.         System.out.println("執(zhí)行PersonDaoBean里的add()方法");  
      8.     }  
      9. } 

      面向接口編程,所以要把接口抽取出來。
      Java代碼
      1. package cn.accp.dao;  
      2.  
      3. public interface PersonDao {  
      4.  
      5.     public void add();  
      6.  
      7. } 
      接口跟實(shí)現(xiàn)類不要放一塊,接下來,如何將PersonDaoBean對象注入進(jìn)PersonServiceBean,北京北大青鳥學(xué)校丁老師表示注入方式有兩種:一種是構(gòu)造器參數(shù),另一種是通過屬性的set方法注入。 下面介紹通過屬性的set方法我們該如何注入PersonDaoBean對象
      PersonServiceBean.java
      Java代碼 
      1. package cn.accp.service.impl;  
      2.  
      3. import cn.accp.dao.PersonDao;  
      4. import cn.accp.service.PersonService;  
      5.  
      6. public class PersonServiceBean implements PersonService {  
      7.     private PersonDao personDao;  
      8.       
      9.     public PersonDao getPersonDao() {  
      10.         return personDao;  
      11.     }  
      12.  
      13.     public void setPersonDao(PersonDao personDao) {  
      14.         this.personDao = personDao;  
      15.     }  
      16.       
      17.     public void save(){  
      18.         personDao.add();  
      19.     }  
      20. } 
      北京北大青鳥學(xué)校丁老師:大家可以看到,在服務(wù)層的這個類里面,我們并沒有看到 PersonDaoBean的身影,也就是說我們并不關(guān)心這個實(shí)現(xiàn)類是誰,我們通過PersonDao這個接口去引用注入進(jìn)來的對象,在通過接口調(diào)用它的 方法。這樣的話,服務(wù)層的組件和DAO層的組件已經(jīng)進(jìn)行徹底的解耦了。
      看下在beans.xml里如何為personDao這個屬性注入PersonDaoBean這個bean呢? 首先要把personDao這個bean配置在Spring中
      Xml代碼 
      1.  
      2. 3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      4.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
      5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 
      6.             
      7.            
      8.              
      9.          
       
      10. 
       
      property這個元素就是用于為屬性注入值,name填寫的是屬性的名稱

      ref 填寫的值就是我們要注入的bean的名稱。Spring會根據(jù)這個名稱從Spring容器里面得到這個bean,因?yàn)檫@個bean默認(rèn)在Spring容器 實(shí)例化后就會被實(shí)例化,所以它在容器里面根據(jù)ref里的名稱得到相應(yīng)的bean,然后把這個bean通過反射技術(shù)就付給了里面的屬性。這就是Spring執(zhí)行的過程。

      我們看下我們注入的personDao這個bean是否能夠成功注入呢? 北京北大青鳥學(xué)校丁老師提示:判斷是否能夠成功注入很簡單,在PersonServiceBean.java里的save方法,調(diào)用了personDao.add()方法,如果注入不 成功的話,就會出現(xiàn)空指針異常;如果能輸出add方法里面打印的那句話,就代表注入是成功的
      Java代碼 
      1. package junit.test;  
      2.  
      3. import org.junit.BeforeClass;  
      4. import org.junit.Test;  
      5. import org.springframework.context.support.AbstractApplicationContext;  
      6. import org.springframework.context.support.ClassPathXmlApplicationContext;  
      7.  
      8. import cn.accp.service.PersonService;  
      9.  
      10. public class SpringTest {  
      11.  
      12.     @BeforeClass 
      13.     public static void setUpBeforeClass() throws Exception {  
      14.     }  
      15.  
      16.     @Test public void instanceSpring(){  
      17.         AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");  
      18.         PersonService personService = (PersonService)ctx.getBean("personService");  
      19.                 personService.save();  
      20.         ctx.close();  
      21.     }  
      22. } 
      運(yùn)行單元測試代碼,控制臺輸出“執(zhí)行PersonDaoBean里的add()方法”。說明注入成功了。

      北京北大青鳥學(xué)校提醒:大家思考下控制反轉(zhuǎn)這個概念,原先我們對象的創(chuàng)建是由應(yīng)用本身創(chuàng)建的,F(xiàn)在對象的創(chuàng)建是由容器幫我們創(chuàng)建,并且由容器注入進(jìn)來,這時(shí)候控制權(quán)發(fā)生了轉(zhuǎn)移,這就是所謂的控制反轉(zhuǎn)。

      北大青鳥網(wǎng)上報(bào)名
      北大青鳥招生簡章
      主站蜘蛛池模板: 国产一区高清视频| 一区二区三区在线播放视频| 亚洲av无码一区二区三区天堂古代 | 精品性影院一区二区三区内射 | 亚州AV综合色区无码一区| 国产激情一区二区三区| 日本免费一区二区三区最新vr| 精品一区二区三区免费| 成人在线一区二区| 国产精品免费视频一区| 亚洲AV成人精品日韩一区| 日韩精品一区二区三区老鸭窝 | 久久久99精品一区二区| 高清无码一区二区在线观看吞精 | 三上悠亚精品一区二区久久| 日韩精品一区二区三区影院| 日本无卡码免费一区二区三区| 国精产品一区一区三区有限在线| 亚洲av成人一区二区三区| 亚洲一区精品视频在线 | 视频一区二区精品的福利| 国产欧美一区二区精品仙草咪| 亚洲中文字幕久久久一区| 国产精品分类视频分类一区| 亚洲国产精品综合一区在线 | 国产日韩高清一区二区三区| 一区二区国产在线观看| V一区无码内射国产| 精品国产一区二区三区AV性色 | 色国产在线视频一区| 波多野结衣在线观看一区| 波霸影院一区二区| 精品免费久久久久国产一区| 国产一区二区视频在线播放| 久久精品国产免费一区| 精品熟人妻一区二区三区四区不卡| 久久精品无码一区二区WWW| 午夜在线视频一区二区三区| 日韩精品一区二区三区在线观看| 无码人妻精品一区二区三区99不卡| 久久婷婷色综合一区二区|