進行依賴注入有三種方式:
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容器里獲取實例並使用。
-
//創建spring容器對象,applicationContext是IOC容器,實際上也是一個接口
-
//ClassPathXmlApplicationContext:是ApplicationContext的接口實現類,是在類的路徑下實現該類
-
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子節點指定屬性值
- 屬性注入是事件開發中最常用的注入方式
-
<!--
-
id:我們從IOC容器取出的唯一標識,一般是類名的首字母小寫
-
class:bean的全類名,通過反射的方式來創建bean,所以要求bean必須有無參的構造器
-
property:代表屬性的配置,其中name是調用name的set方法(注意set方法的名字要保持一致),value是賦值
-
-->
-
<bean id="helloWorld" class="com.dhx.HelloWorld">
-
<property name="name" value="shangguigu"></property>
-
</bean>
3.構造器方法注入
- 通過構造方法注入bean的屬性值或依賴的對象,他保證了Bean實例在實例化就可以使用
- 構造器注入在<constructor-arg>元素里聲明屬性,<constructor-arg>中沒有name屬性
- 使用構造器注入屬性值可以指定參數的位置和參數的類型,來區分重載的構造器。
-
<!--
-
id:我們從IOC容器取出的唯一標識,一般是類名的首字母小寫
-
class:bean的全類名,通過反射的方式來創建bean,所以要求bean必須有無參的構造器
-
constructor-arg:value是賦值,index是參數的位置,type是參數的類型
-
-->
-
<bean id="car2" class="com.dhx.Car">
-
<constructor-arg value="baoma" index="1"></constructor-arg>
-
<constructor-arg value="beijing" index="0"></constructor-arg>
-
<constructor-arg value="240" type="int"></constructor-arg>
-
</bean>
轉載:https://zhuanlan.zhihu.com/p/90939765