1. 程式人生 > >依賴注入的兩種方式並附上例子

依賴注入的兩種方式並附上例子

1.依賴注入:就是指程式在執行過程中,如果需要另外一個物件協助完成時,無需在程式碼中建立被呼叫者,而是依賴外部的注入獲取。

2.依賴注入的兩種方式:

設定注入:設定注入是通過setter方法注入被呼叫者的例項。

構造注入:利用構造方法來設定依賴注入的方式稱為構造注入。

3.接下來附上例子來說明設定注入

(1).首先,附上設定注入的例子,新建一個Java專案,配置好spring後,即可,專案結構圖如下圖所示:

(2).首先,新建2個介面,一個Animal介面,一個Person介面,其中Animal介面有一個抽象的用途方法,就是動物是用來幹嘛的,其中Person介面有一個飼養的方法。

Animal.java檔案程式碼如下:

  1. package com.inter;  
  2. publicinterface Animal {  
  3.     void use();//定義抽象的用途方法
  4. }  

Person.java檔案程式碼如下:

  1. package com.inter;  
  2. publicinterface Person {  
  3.     void raise();//定義抽象的飼養方法
  4. }  


(3).接著新建3個類,放在com.bean包下,分別為Dog、Cat、Businessman類,其中Dog、Cat類的use方法只輸出一句話,Businessman類中有個Animal物件屬性,並有其對應的setter方法,有一個raise方法,也是簡單的輸出和呼叫方法。

Dog.java檔案程式碼如下:

  1. package com.bean;  
  2. import com.inter.Animal;  
  3. publicclass Dog implements Animal{  
  4.     @Override
  5.     publicvoid use() {  
  6.         // TODO Auto-generated method stub
  7.         System.out.println("狗的用途是看家");  
  8.     }  
  9. }  


Cat.java檔案程式碼如下:

  1. package com.bean;  
  2. import com.inter.Animal;  
  3. publicclass Cat implements Animal{  
  4.     @Override
  5.     publicvoid use() {  
  6.         // TODO Auto-generated method stub
  7.         System.out.println("貓的用途是捉老鼠");  
  8.     }  
  9. }  


Businessman.java檔案程式碼如下:

  1. package com.bean;  
  2. import com.inter.Animal;  
  3. import com.inter.Person;  
  4. publicclass Businessman implements Person {  
  5.     private Animal animal;  
  6.     public Businessman() {  
  7.     }  
  8.     publicvoid setAnimal(Animal animal) {  
  9.         this.animal = animal;  
  10.     }  
  11.     @Override
  12.     publicvoid raise() {  
  13.         // TODO Auto-generated method stub
  14.         System.out.println("人飼養動物");  
  15.         animal.use();  
  16.     }  
  17. }  

(4).對上面的類在applicationContext.xml檔案中進行配置,程式碼如下:

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beans
  3.     xmlns="http://www.springframework.org/schema/beans"
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.     xmlns:p="http://www.springframework.org/schema/p"
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  7.     <beanid="bus"class="com.bean.Businessman">
  8.         <propertyname="animal">
  9.             <refbean="dog"/>
  10.         </property>
  11.     </bean>
  12.     <beanid="dog"class="com.bean.Dog"></bean>
  13.     <beanid="cat"class="com.bean.Cat"></bean>
  14. </beans>

其中定義一個Businessman類的bean中,有個屬性property標籤,其中name對應Businessman類的Animal物件屬性,並且使用ref標籤引用了下面定義的Dog物件的id, 就這樣設定注入了dog物件。

(5).最後編寫測試類Test,程式碼如下:

  1. package com.test;  
  2. import org.springframework.context.ApplicationContext;  
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4. import com.inter.Person;  
  5. publicclass Test {  
  6.     publicstaticvoid main(String[] args){  
  7.         ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");  
  8.         Person p=(Person) ac.getBean("bus");  
  9.         p.raise();  
  10.     }  
  11. }  


通過查詢配置檔案來找到有id為bus的bean,然後把這個bean強制轉換為一個Person物件,再呼叫這個Person物件的raise方法,此時raise方法即為Businessman的raise方法,因為在Businessman類中使用了Animal物件屬性,並通過設定注入到了配置檔案中。

(6).執行後效果如下:

為什麼輸出的是狗的用途呢,因為我們把物件屬性通過設定注入的方式注入到配置檔案中,而配置檔案中的物件屬性引用的為Dog這個類。

4.接下來附上構造注入的例子,來說明構造注入

(1).首先,新建一個Java專案,配置好Spring環境,先附上這個專案的檔案結構圖:

(2).首先,定義兩個介面,分別為Axe和Person介面,放在com.inter包下,其中Axe(斧頭)介面定義了一個抽象的chop(砍)方法,其中Person(人)介面定義了一個使用斧頭的方法。

Axe.java檔案的程式碼如下:

  1. package com.inter;  
  2. publicinterface Axe {  
  3.      String chop();  
  4. }  

Person.java檔案程式碼如下:

  1. package com.inter;  
  2. publicinterface Person {  
  3.     void useAxe();  
  4. }  

(3).接著新建3個類,分別為Chinese、SteelAxe、StoneAxe類,放在com.bean包下,其中Chinese類實現Person介面,SteelAxe和StoneAxe類實現Axe介面,其中Chinese類有一個物件屬性,一個普通屬性,並通過構造方法傳入兩個屬性作為引數,其中SteelAxe、StoneAxe類裡有一個返回值為字串的方法。

Chinese.java檔案程式碼如下:

相關推薦

依賴注入方式附上例子

1.依賴注入:就是指程式在執行過程中,如果需要另外一個物件協助完成時,無需在程式碼中建立被呼叫者,而是依賴外部的注入獲取。 2.依賴注入的兩種方式: 設定注入:設定注入是通過setter方法注入被呼叫者的例項。 構造注入:利用構造方法來設

Spring 依賴注入方式的實現,及迴圈依賴問題的解決(原始碼+XML配置)

搬磚啦,搬磚啦,這幾天在看Spring相關的書,下面給大家分享一下這幾天的心得與收穫,Go Go Go! Spring支援兩種依賴注入方式,分別是屬性注入,建構函式注入。除此之外,Spring還支援工廠注入方式。 接下來,我們一起來了解一下Spring的幾種注入方式。

Spring 依賴注入方式

紙上得來終覺淺 1.構造器注入 AnimalDao: package com.roadArchitectWeb.dao; public interface AnimalDao { /*所有動物有一個說話的方法*/ public void say(); } CatDao

spring依賴注入方式

依賴注入的兩種方式: 網上說的三種注入方式中的介面注入在官方的文件中已經沒有了(spring4.3),所以現在的依賴注入的方式有兩種。 構造方法注入: 通過呼叫帶引數的構造方法來實現,每一個引數都代表是一個依賴。呼叫(注入)的物件通過在被注入物件中的構造方

javaweb-spring專案-idea使用junit測試支援spring的IOC依賴注入方式

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:spring/spring-*.xml"}) public class ClientTest { @Autowired

Spring 依賴注入方式

依賴注入是Spring IoC容器實現反轉控制的方式,Spring的IoC容器以依賴注入的方式實現了Bean物件之間關聯關係的維護。 Spring的IoC容器實現了兩種方式的物件注入,一種是構造方法,一種是setter方法。 基於構造方法的依賴注入 基於構造方法的依賴注入

Spring依賴注入常用的方式

Spring中依賴注入:定義物件之間的彼此依賴,常用的兩種注入方式:setter方法和構造器 1、setter方法:在容器中宣告變數並插入對應setter和getter方法,在對應xml文件中配置,程

方式估計北京一年出租出去的房子數量,互相驗證。(滴滴打車-2014)

延伸 自由職業 方式 個人 學術 題目中的 其他 驗證 工作 詳解: 可以采取兩種方法。 方法一: (1)分析問題 北京一年出租出去的房子數量,租房是一個強需求,穩定有房的居民不會去租房,無房但已經租房的人不會去租房,無房且需要居住房子的人才會去租房,也是我們需要關註的群體

網絡協議 finally{ return問題 註入問題 jdbc註冊驅動問題 PreparedStatement 連接池目的 1.2.1DBCP連接池 C3P0連接池 MYSQL方式進行實物管理 JDBC事務 DBUtils事務 ThreadLocal 事務特性 發訪問 隔離級別

ID -- 1.7 ner red style 沒有 建立 工具 1.1.1 API詳解:註冊驅動 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建議使用 原因有2個: >導致驅動被註冊2次。 &

Java發編程:線程間協作的方式:wait、notify、notifyAll和Condition

消費者 CI 能夠 .com stat consumer 使用 producer imp 原文鏈接 Java並發編程:線程間協作的兩種方式:wait、notify、notifyAll和Condition 在前面我們將了很多關於同步的問題,然而在現實中,需要線程之間的協作。比

python發編程:多線程-開啟線程的方式

utf-8 data NPU pre int thread pro reading class 一 threading模塊介紹 multiprocess模塊完全模仿了threading模塊的接口,二者在使用層面,有很大的相似性 二 開啟線程的兩種方式 方式一 f

7 發編程-(線程)-開啟線程的方式

tip clas 兩種 pri __main__ 默認 主線程 self rgs thread/英 /θred/ 美 /θr?d/ 線程 1、threading模塊介紹 multiprocess模塊的完全模仿了threading模塊的接口,二者

將HTML頁面自動儲存為PDF檔案上傳的方式(一)-前端(react)方式

一、業務場景   公司的樣本檢測報告以React頁面的形式生成,已調整為A4大小的樣式並已實現分頁,業務上需要將這個網頁生成PDF檔案,並上傳到伺服器,後續會將這個檔案傳送給客戶(這裡不考慮)。 二、原來的實現形式   瀏覽器原生方法:window.print()可以將網頁儲存為PDF檔案,由於檢測報告

win7設定自啟動的方式(谷歌瀏覽器自啟動預設全屏展示不需要按F11)

功能需求:win7系統需要設定谷歌瀏覽器自啟動,然後進入一個頁面進行播放展示,預設的是瀏覽器全屏。 首先第一步設定自啟動兩種方法: 方法1: win7系統在開始選單中找到名稱為:啟動 也有可能叫(Startup)的資料夾,然後把谷歌瀏覽器複製貼上到這個資料夾中。正常情況下這個辦法就可以了

dljd_026_方式獲取到的session查詢時對事務環境的不同依賴

一、測試兩種獲取到的session在查詢中的表現   1.1通過getCurrentSession獲取到的session查詢物件   1.1.1get方法通過getCurrentSession獲取到的session查詢物件   package edu.aeon.test; import or

Eclipse 離線安裝 STS Spring Tool Suite 順帶簡單附上線上安裝的方式

*環境需準備好,其他的不需要,至少JDK安裝完畢且配置好環境變數 1.準備好Eclipse,本文當時使用的版本是【Eclipse IDE 2018‑09】Version: 2018-09 (4.9.0) Eclipse 下載地址 https://www.eclipse.org/do

方式實現多執行緒共享資源(典型的售票例子

1、繼承Thread TestThread類 public class TestThread extends Thread{ private int ticket = 300; @Override public void run() { while(true){

合併個陣列去重(ES5和ES6方式實現)

 ES6實現方式 let arr1 = [1, 1, 2, 3, 6, 9, 5, 5, 4] let arr2 = [1, 2, 5, 4, 9, 7, 7, 8, 8] f

Spring——容器,注入(配置和註解方式

一、Spring的容器: 1.什麼是控制反轉:傳統的方法,當某個java物件A需要呼叫物件B時,是由呼叫者(物件A)通過new關鍵字來建立物件B的,而在Spring中,則是由spring完成建立的,所以“控制反轉”了。 2.容器: Spring容器是Spring的核心。 例

DAO層注入HibernateTemplate的方式

-------------------------siwuxie095 DAO 層注入 HibernateTemplate 的兩種方式 方式一:普通方式 具體實現如下: