spring依賴注入的3種方式

spring的主要特點就是依賴注入和控制反轉,那麼注入的方式有多少種呢。答案是三種分別是註解,get和set方法,構造器注入,下面就來簡單的說下用法。

1.最簡單的是第二種,我們只需要在bean裏使用properties注入進去就可以了,如

 

  1. <bean id="personManager" class="org.lxh.impl.PersonManger"> 
  2.          <property name="teacherDao" ref="teacherDao"></property> 
  3.      </bean> 

這樣的話只需要在我們的bean里加入該dao的set方法就ok了,get方法要不要都可以

 

  1. private TeacherDao teacherDao; 
  2. public TeacherDao getTeacherDao() { 
  3.     return teacherDao; 
  4.  
  5. public void setTeacherDao(TeacherDao teacherDao) { 
  6.     this.teacherDao = teacherDao; 

2.構造器注入

這裏需要用到一個叫constructor-arg的標籤,裏面的屬性爲index(從0開始),ref,value(注入普通變量的時候用),type(注入普通變量的時候可以不寫),這裏的type表示的是接口

  1. <constructor-arg index="0" type="org.lxh.dao.StudentDao" ref="dao"></constructor-arg>  

bean裏面這樣寫就OK 了,這裏要注意的是要留下默認的構造器

 

  1.  private StudentDao dao;
  2. public PersonManger() { 
  3.  
  4.  } 
  5.  public PersonManger(StudentDao dao) { 
  6. this.dao = dao; 

3.使用註解注入

使用註解的時候,需要增加下面3句,並打開那個反射節點

  1.  xmlns:context="http://www.springframework.org/schema/context" 
  2. http://www.springframework.org/schema/context 
  3. http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

配置文件大致如下

  1. <beans xmlns="http://www.springframework.org/schema/beans" 
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.        xmlns:context="http://www.springframework.org/schema/context" 
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
  6.            http://www.springframework.org/schema/context 
  7.            http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 
  8.      <context:annotation-config/> 

使用註解有2種方式分別是:自動裝配,手工裝配,開發中建議使用手工裝配,這幾個註解分別爲@Resource(默認按名稱裝配),@Autowired(自動裝配默認是按類型裝配)

 

  1. // //註解注入的第一種方式 
  2.     // @Resource private StudentDao dao; 
  3.     // 
  4.     // public PersonManger() { 
  5.     // 
  6.     // } 
  7.     // public PersonManger(StudentDao dao) { 
  8.     // this.dao = dao; 
  9.     // } 
  10.     // 註解注入的第二種方式 
  11.     // private StudentDao dao; 
  12.     // 
  13.     // @Resource 
  14.     // public void setDao(StudentDao dao) { 
  15.     // this.dao = dao; 
  16.     // } 

@Service,@Controller,@Repository,@Component,目前的話四個註解spring沒有做嚴格區分,隨便用哪一個都可以,主要用於組件自動掃描,要使用這種方式就要填一個節點,使用這個節點前面的那個反射的節點就可以不用了

<context:component-scan base-package="org.lxh"></context:component-scan>

base-package配置的是基本包,這個根據實際情況作修改,之後的工作就是在需要在要交給spring管理的接口和實現類加入上面四個註解中的一個 ,這裏的註解也可以配置bean的名稱,名稱的配置就不細說了

 

  1. package org.lxh.impl; 
  2.  
  3. import org.lxh.dao.TeacherDao; 
  4. import org.springframework.stereotype.Service; 
  5.  
  6. @Service("TeacherManager"
  7. public class TeacherManager implements TeacherDao { 
  8.  
  9.     public void tachc() { 
  10.         System.out.println("通過properties方式注入"); 
  11.     } 
  12.  
  13.  
  14. package org.lxh.dao; 
  15.  
  16. import org.springframework.stereotype.Repository; 
  17.  
  18. @Repository 
  19. public interface TeacherDao { 
  20.  
  21.     public abstract void tachc(); 
  22.  

這樣的配置單元測試代碼應該如下

  1. package org.lxh.test; 
  2.  
  3. import org.lxh.dao.PersonDao; 
  4. import org.lxh.dao.TeacherDao; 
  5. import org.springframework.context.ApplicationContext; 
  6. import org.springframework.context.support.AbstractApplicationContext; 
  7. import org.springframework.context.support.ClassPathXmlApplicationContext; 
  8.  
  9.  
  10. public class Testunit { 
  11.    @org.junit.Test public void  TestUse(){ 
  12.        //初始化spring容器 
  13.        //ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); 
  14.        AbstractApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); 
  15.        //取得業務bean 
  16.        TeacherDao dao=(TeacherDao)context.getBean("TeacherManager"); 
  17.        dao.tachc(); 
  18.       // dao.sayHello(); 
  19.       // context.close(); 
  20.    } 

下面是運行結果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章