1. 程式人生 > >Spring中自動裝配的三種方式

Spring中自動裝配的三種方式

Sprring中Bean的自動裝配有3種方法:一、byName 二、byType 三、Constructor

第一步:配置我們的spring-autowriting.xml,我們先使用第一種方法ByName

第二步:建立3個類,一個測試類TestAutoWriting,一個是引用類AutoWritingService,一個是被引用類AutoWritingDAO

測試類,不必多說,引入xml後通過getbean獲得引用類的例項

package com.imooc.test.autowriting;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.imooc.autowriting.AutoWritingService;

public class TestAutoWriting {
 public static void main(String[] args) {
  ApplicationContext ctx=new ClassPathXmlApplicationContext("spring-autowriting.xml");
  AutoWritingService service=ctx.getBean("autoWritingService", AutoWritingService.class);
  service.say("this is a test");
 }

}

引用類 當採用ByName方式時,需要對被引用類的例項進行set封裝

package com.imooc.autowriting;

public class AutoWritingService {
 private AutoWritingDAO autoWritingDAO;

 public void setAutoWritingDAO(AutoWritingDAO autoWritingDAO) {
  this.autoWritingDAO = autoWritingDAO;
 }
 
 public void say(String word)
 {
  this.autoWritingDAO.say(word);
 }
}

被引用類

package com.imooc.autowriting;

public class AutoWritingDAO {
 public void say(String word) {
  System.out.println("AutoWritingDAO:" + word);
 }

}

第三步: 進行測試

byName的方法的原理有一點值得說一下:setAutoWritingDAO這個方法的執行是因為我們在xml中配置了default-autowire="byName",當進入被引用類時,setAutoWritingDAO方法被執行,通過在xml中尋找name為autoWritingDAO的Bean,如果沒找到就不執行。

第二種方法ByType的原理其實與byName差不多,只不過這一次它的尋找條件變成了class類,可以理解在執行setAutoWritingDAO時,對比class類和我們穿進去的引數是不是一個型別,

如果是就執行,不是就不執行,值得注意的是:這裡填不填Name都無所謂。

更改一下xml即可測試成功

第三種方法Constructor,當使用這種方法時,被引用類的寫法要改變,不需要再寫set方法,而是要寫類的建構函式

package com.imooc.autowriting;

public class AutoWritingService {
 private AutoWritingDAO autoWritingDAO22;

   public AutoWritingService(AutoWritingDAO autoWritingDAO)
   {
    this.autoWritingDAO22=autoWritingDAO;
   }
 
 public void say(String word)
 {
  this.autoWritingDAO22.say(word);
 }
}

改變xml中的方法後即可測試成功

 我們說了這麼多,那麼我們上面做的這些究竟是為了什麼?

答案是通過依賴注入來實現鬆耦合。

首先給大家丟擲耦合的概念。什麼是耦合?

不用Spring的情況下,

package com.imooc.autowriting;

public class AutoWritingService {
 private AutoWritingDAO autoWritingDAO22;

   public AutoWritingService(AutoWritingDAO autoWritingDAO)
   {
    this.autoWritingDAO22=autoWritingDAO;
   }
 
 public void say(String word)
 {
  this.autoWritingDAO22.say(word);
 }
}

假設說AutoWritingDAO是一個介面,這麼寫肯定不行,我們必須有它的實現類。  public AutoWritingService(AutoWritingDAOiml autoWritingDAO)

但這麼寫有一個致命的缺點就是緊耦合。

在AutoWritingService這個類我們建立了autoWritingDAO的例項,讓這2個類緊緊地聯絡在了一起,這就是緊耦合。耦合當然是必須的,但是緊耦合會帶來很多壞處。使用Spring的依賴注入,可以讓我們使用任何一個AutoWritingService介面的實現類。這樣我們就可以在不懂原始碼的情況下偷偷更換介面的實現。

相關推薦

Spring自動裝配方式

Sprring中Bean的自動裝配有3種方法:一、byName 二、byType 三、Constructor 第一步:配置我們的spring-autowriting.xml,我們先使用第一種方法ByName 第二步:建立3個類,一個測試類TestAutoWriting,一

SpringBean的裝配方式

bean的裝配通俗點就是依賴注入(spring的特點之一),再說通俗點就是類中屬性的賦值,而這種賦值不是由我們直接在程式碼中賦值,而是通過在配置檔案中配置值類實現的,給他起了一個高大上的名字,讓我來說就是把賦值包裝了一層還有一層呀。讓我們一起看看這三種裝配方式怎麼實現的吧!!

Springbean的裝配機制之——自動裝配

基本介紹   關於各種配置,從來沒搞懂過。但是覺得框架發展這麼快,而且結構這麼巨集大,其實現微觀上來講應該從來沒有一種標準方式、更沒有說是固定的幾種。比如Spring專有的@Component、@Autowired註解,大多數情況下都可以被javax.inje

面試被問Spring迴圈依賴的方式!!!

什麼是迴圈依賴? 迴圈依賴其實就是迴圈引用,也就是兩個或則兩個以上的 Bean 互相持有對方,最終形成閉環。比如A依賴於B,B依賴於C,C又依賴於A。如下圖: 如果在日常開發中我們用new 物件的方式發生這種迴圈依賴的話程式會在執行時一直迴圈呼叫,直至記憶體溢位報錯。下面說一下Spring是如果解決迴

springbean的例項化方式

Bean的三種建立方式: xml配置 <!-- 配置資源:把物件的建立交給spring來管理 --> <bean id="customerService" class="com.service.impl.CustomerServiceImpl"><

Spring定義bean的方式自動注入

前言:隨著一個專案規模的增大,我們不得不引入許多Java bean物件,而這些物件一般來說是在Spring的配置檔案applicationContext.xml中進行配置的,這樣就聲明瞭這是一個由Spring容器管理的bean物件。這種做法必然會導致Spring的配置檔案的

關於springbean的配置方式的比較

在學習spring時,看到有關spring中bean的三種配置方式:基於xml配置,基於註解配置和基於類配置。書中總結的很不錯,就記錄下來,方便學習和檢視。(三種配置方式的介紹可以參考:三種方式配Bea

Struts2學習(二)運行Action方法的方式

tracking 利用 content con return -m i++ var itl 1.運行execute()方法 一般的能夠直接在action中書寫execute,調用action時會自己主動運行此方法 2.配置method方法 在s

Spring靜態注入的方式

Spring靜態注入的三種方式: (說明:MongoFileOperationUtil是自己封裝的一個Mongodb檔案讀寫工具類,裡面需要依賴AdvancedDatastore物件例項,dsForRW用來獲取Mongodb資料來源) 在springframework裡,我們不能@Autowir

spring注入bean的方式

1、自動化裝配bean 元件裝配:Spring會自動發現應用上下文所建立的bean。 自動裝配:Spring自動滿足bean之間的依賴 在類上加入@Component註解,告訴spring為這個類建立bean 使用@Autowired註解實現自動裝配,也可以使用java規範的@Inj

Spring-02 -Spring 建立物件的方式 :1.通過構造方法建立/2.例項工廠/3.靜態工廠

通過構造方法建立      1.1 無參構造建立:預設情況.     1.2 有參構造建立:需要明確配置       1.2.1 需要在類中提供有參構造方法       1.2.2 在 applicationContext.x

分享知識-快樂自己:Spring的()異常處理機制

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSch

Spring生成bean的方式(xml)

1.普通的配置bean物件,呼叫的是其無參構造方法。 <bean id="userDao" class="com.icbc.spring.study1.UserDaoImpl"></bean> 即:該userDao 的例項 是通過

spring容器啟動的方式

一、在Web專案中,啟動Spring容器的方式有三種,ContextLoaderListener、ContextLoadServlet、ContextLoaderPlugin。 1.1、監聽器方式: web.xml <context-param> &

Spring建立物件的方式

1.建立物件的三種方式和bean的生命週期的驗證: Animal介面程式碼: package cn.pb.dao; /** * 動物介面 */ public interface Animal { //吃飯 String eat(); //睡覺

Spring自動裝配Bean的屬性

Spring的最基本的能力就是DI,即依賴注入,或控制反轉,它可以為Bean注入其依賴的其他Bean。 一個Bean依賴其他Bean一般是通過在Bean中定義其他Bean的成員變數的方式來實現的,那麼,Spring的DI也就表現為給Bean的屬性自動注入值。 這一般分為以下其中情況。 1

Spring配置資料來源的方式 (dbcp c3p0 jndi)

  [html]  view plain copy   1,使用org.springframework.jdbc.datasource.DriverManage

spring自動裝配的有哪些

在框架中共有5種自動裝配: 1.       no:這是Spring框架的預設設定,在該設定下自動裝配是關閉的,開發者需要自行在bean定義中用標籤明確的設定依賴關係。 2.       byN

spring建立物件的方式詳解

前言 我們知道spring框架的核心就是IOC容器了,那麼IOC容器主要的作用就是建立物件和處理物件之間的依賴關係。本文主要講解IOC容器建立物件的三種方式。 建立物件的三種方式 1) 呼叫無引數構造器 2) 帶引數構造器 3) 工廠建立物件

【SSH三大框架】Spring基礎第二篇:Spring依賴注入的方式

控制反轉(Inversion of Control)和依賴注入(Dependency Injection):應用控制反轉,物件在被建立的時候,由一個調控系統內所有物件的外界實體將其所依賴的物件的引用傳遞給它。也可以說,依賴被注入到物件中。所以,控制反轉是,關於一個物件如何獲