依賴注入的三種方式


進行依賴注入有三種方式:

1、構造方法依賴注入

public class StupidStudent { private SmartStudent smartStudent; public StupidStudent(SmartStudent smartStudent) { this.smartStudent = smartStudent; } public doHomewrok() { smartStudent.doHomework(); System.out.println("學渣抄作業"); } }

 

public class StudentTest { public static void main(String[] args) { SmartStudent smartStudent = new SmartStudent(); StupidStudent stupidStudent = new StupidStudent(smartStudent); stupidStudent.doHomework(); } }

這種方式好比學渣從一開始就賴上了一個學霸,並且和這個學霸建立了長期合作關系。

2、setter方法注入

public class StupidStudent { private SmartStudent smartStudent; public void setSmartStudent(SmartStudent smartStudent) { this.smartStudent = smartStudent; } public doHomewrok() { smartStudent.doHomework(); System.out.println("學渣抄作業"); } }

 

public class StudentTest { public static void main(String[] args) { SmartStudent smartStudent = new SmartStudent(); StupidStudent stupidStudent = new StupidStudent(); stupidStudent.setSmartStudent(smartStudent); stupidStudent.doHomework(); } }

這種方式學霸和學渣只是暫時的合作關系,如果學渣賴上了另一個學霸(調用set()方法傳入了另一個對象),那么學渣和學霸的合作關系就結束了。

3、接口注入

public class StupidStudent { public void doHomewrok(SmartStudent smartStudent) { smartStudent.doHomework(); System.out.println("學渣抄作業"); } }

 

public class StudentTest { public static void main(String[] args) { SmartStudent smartStudent = new SmartStudent(); StupidStudent stupidStudent = new StupidStudent(); stupidStudent.doHomework(smartStudent); } }

采用這種注入方式,學渣只是在做作業時,才臨時抱佛腳地找一下學霸。 

 

 

一:spring容器

1.在spring IOC容器讀取bean配置創建bean實例之前,必須對他進行實例化,只有在容器實例化之后,才可以在IOC容器里獲取實例並使用。

  1.  
    //創建spring容器對象,applicationContext是IOC容器,實際上也是一個接口
  2.  
    //ClassPathXmlApplicationContext:是ApplicationContext的接口實現類,是在類的路徑下實現該類
  3.  
    ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");

2.spring提供了兩種類型的IOC容器實現

  • BeanFactory:IOC容器的基本實現。
  • ApplicationContext:提供了更多的高級特性,是BeanFactory的子類。
  • BeanFactory是spring框架的基礎設施,面向spring本身,而ApplicationContext面向使用spring框架的開發中,幾乎所有的應用場合都是使用ApplicationContext,而非BeanFactory。
  • 無論使用何種方式,配置文件時是相同的。

二:ApplicationContext

1.ApplicationContext是一個接口,其有兩個主要實現類

  • ClassPathXmlApplicationContext:從類的路徑下加載配置文件。
  • FileSystemXmlApplicationContext:從文件系統中加載配置文件

2.configurableApplicationContext擴展於ApplicationContext,新增加兩個主要方法,refresh()方法,close()方法。讓ApplicationContext具有啟動,刷新和關閉上下文的能力。

3.ApplicationContext在初始上下文的時候,就實例化所有單例的bean

4.WebApplication是專門用來為WEB應用而准備的,他允許從相對於WEB根目錄的路徑中完成初始操作。

三:依賴 注入的三種方式

1.spring支持三種依賴注入的方式

  • 屬性注入(最常用的)
  • 構造器注入
  • 工廠方法注入(很少使用,不推薦大家使用,這里就不介紹了)

2.屬性注入

  • 屬性注入即通過set方法注入Bean的屬性值或依賴的對象
  • 屬性注入使用<property>元素,使用name屬性指定Bean的屬性名稱,value屬性或者value子節點指定屬性值
  • 屬性注入是事件開發中最常用的注入方式
  1.  
    <!--
  2.  
    id:我們從IOC容器取出的唯一標識,一般是類名的首字母小寫
  3.  
    class:bean的全類名,通過反射的方式來創建bean,所以要求bean必須有無參的構造器
  4.  
    property:代表屬性的配置,其中name是調用name的set方法(注意set方法的名字要保持一致),value是賦值
  5.  
    -->
  6.  
    <bean id="helloWorld" class="com.dhx.HelloWorld">
  7.  
    <property name="name" value="shangguigu"></property>
  8.  
    </bean>

3.構造器方法注入

  •  通過構造方法注入bean的屬性值或依賴的對象,他保證了Bean實例在實例化就可以使用
  • 構造器注入在<constructor-arg>元素里聲明屬性,<constructor-arg>中沒有name屬性
  • 使用構造器注入屬性值可以指定參數的位置和參數的類型,來區分重載的構造器。
  1.  
    <!--
  2.  
    id:我們從IOC容器取出的唯一標識,一般是類名的首字母小寫
  3.  
    class:bean的全類名,通過反射的方式來創建bean,所以要求bean必須有無參的構造器
  4.  
    constructor-arg:value是賦值,index是參數的位置,type是參數的類型
  5.  
    -->
  6.  
    <bean id="car2" class="com.dhx.Car">
  7.  
    <constructor-arg value="baoma" index="1"></constructor-arg>
  8.  
    <constructor-arg value="beijing" index="0"></constructor-arg>
  9.  
    <constructor-arg value="240" type="int"></constructor-arg>
  10.  
    </bean>

 

轉載:https://zhuanlan.zhihu.com/p/90939765


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM