1. 程式人生 > >Spring的注入案例分析(設值注入和構造注入)

Spring的注入案例分析(設值注入和構造注入)

日期: 2016-7-14

內容: 學習和記錄Spring的注入內容:

一、什麼是Spring的注入:

spring的注入是指在啟動spring容器載入Bean配置的時候,完成對對變數的賦值行為。常見的spring注入的方式有兩種,分別是設值注入和構造注入。

IOC在載入的時候會掃描XML檔案裡面的Bean的相關配置,然後為這些Bean進行例項化(建立Bean)。所謂注入就是在建立的過程中完成對成員變數的賦值

打個比方,假如在A類裡面引入了一個B類聲明瞭一個B類的變數b,注入就是在IOC容器初始化A的時候就把b的變數進行賦值。

1、 設值注入:

設值注入就是通過成員變數的set方法進行注入。程式碼演示如下:

①、 com.dao.InjectionDAO介面:

package com.dao;

public interface InjectionDAO {

	//新增模擬資料庫操作方法save()
	public void save(String args);
}

②、 com.dao.InjectionImpl類繼承InjectionDAO介面實現資料儲存方法:

package com.dao;

public class InjectionDAOImpl implements InjectionDAO {

	public void save(String args){
		System.out.println("資料儲存: "+args);
	}
}

、 com.service.InjectionService介面建立:

package com.service;

public interface InjectionService {

	public void save(String args);
}

、 com.service.InjectionServiceImpl類實現InjectionService介面:

package com.service;

import com.dao.InjectionDAO;

public class InjectionServiceImpl implements InjectionService {
	
	//初始化InjectionDAO的一個物件
	InjectionDAO injectionDAO;
	
	//獲得set物件完成設值注入
	public void setInjectionDAO(InjectionDAO injectionDAO)
	{
		this.injectionDAO = injectionDAO;
	}
	
	public void save(String args){
		System.out.println("獲得資料: "+args);
		
		args = args + this.hashCode();
		
		//呼叫InjectionDAO將資料儲存在資料庫
		injectionDAO.save(args);//----->在applicationContext.cml中配置設值注入
	}
}

⑤、 在applicationContext.xml檔案中設定設值注入方式注入:

<!-- Spring IOC注入方式: 設值注入 -->
    <bean id="injectionService" class="com.service.InjectionServiceImpl">
    	<property name="injectionDAO" ref="injectionDAO"></property>
    </bean>
    
    <bean id="injectionDAO" class="com.dao.InjectionDAOImpl"></bean>

⑥、 編寫測試類測試:

	@Test
	public void testSpringIOC()
	{
		//載入Spring配置檔案
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		InjectionService service = (InjectionService) ac.getBean("injectionService");
		service.save("要儲存的資料!");
	}

、 測試結果:

2016/07/14 11:17:16 org.springframework.context.support.AbstractApplicationContext prepareRefresh
情報: Refreshing org[email protected]1be2d65: startup date [Thu Jul 14 11:17:16 CST 2016]; root of context hierarchy
2016/07/14 11:17:16 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
情報: Loading XML bean definitions from class path resource [applicationContext.xml]
獲得資料: 要儲存的資料!
資料儲存: 要儲存的資料!27296482

2、構造注入: 

構造注入和設值注入的主要區別就是體現在service類的實現類裡和配置檔案裡。程式碼如下:

①、 com.service.InjectionServiceImpl下新增一個顯示的構造器:

package com.service;

import com.dao.InjectionDAO;

public class InjectionServiceImpl implements InjectionService {
	
	//初始化InjectionDAO的一個物件
	InjectionDAO injectionDAO;
	
	//獲得set物件完成:設值注入
//	public void setInjectionDAO(InjectionDAO injectionDAO)
//	{
//		this.injectionDAO = injectionDAO;
//	}
	
	//完成構造注入
	public InjectionServiceImpl(InjectionDAO injectionDAO)
	{
		this.injectionDAO = injectionDAO;
	}
	
	public void save(String args){
		System.out.println("獲得資料: "+args);
		
		args = args + this.hashCode();
		
		//呼叫InjectionDAO將資料儲存在資料庫
		injectionDAO.save(args);//----->在applicationContext.cml中配置設值注入
	}
}

、 在applicationContext.xml裡新增構造注入的程式碼:

<!-- Spring IOC注入方式: 構造注入 -->
    <bean id="injectionService" class="com.service.InjectionServiceImpl">
    	<constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
    </bean>
    <bean id="injectionDAO" class="com.dao.InjectionDAOImpl"></bean>

③、 執行測試類:結果如下

2016/07/14 11:37:24 org.springframework.context.support.AbstractApplicationContext prepareRefresh
情報: Refreshing org[email protected]6eb38a: startup date [Thu Jul 14 11:37:24 CST 2016]; root of context hierarchy
2016/07/14 11:37:26 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
情報: Loading XML bean definitions from class path resource [applicationContext.xml]
獲得資料: 要儲存的資料!
資料儲存: 要儲存的資料!25772535

就個人所瞭解,在實戰開發中使用的比較多的還是屬於設值注入。

相關推薦

Spring注入案例分析(注入構造注入)

日期: 2016-7-14 內容: 學習和記錄Spring的注入內容: 一、什麼是Spring的注入: spring的注入是指在啟動spring容器載入Bean配置的時候,完成對對變數的賦值行為。

Spring的核心機制:依賴注入注入構造注入的區別

Ø 理解依賴注入 在分析原理之前我們先回顧下依賴注入的概念:我們常提起的依賴注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。具體含義是:當某個角色(可能是一個Java例項,呼叫者)需要另一個角色(另一個Jav

Spring注入構造注入

設值注入 概念: 指 IoC容器通過成員變數的setter方法來注入被依賴物件 介面 public interface User{ public addCard(); } public interface Card{ public

Spring注入構造注入的比較

在過去的開發過程中,這兩種注入方式都是非常常用的。Spring也同時支援這兩種依賴注入的方式:設值注入和構造注入。這兩種依賴注入的方式並沒有絕對的好壞,知識適應的場景不一樣。 相比而言設定注入具有以下優點:                    1)與傳統的JavaBean

Spring基於建構函式函式的依賴注入

基於建構函式的依賴注入 我們知道,bean標籤中指定的類會進行初始化,這個初始化過程中自然會呼叫建構函式,那我們也可以利用這個建構函式完成依賴注入。 先建立一個類: public class TextEditor { public TextEditor(SpellChecker spellCheck

深入理解spring容器中的控制反轉(IOC)依賴注入(DI)

首先在開篇之前我們一定一定要明確的就是:DI和IOC並不是兩個概念,DI是IOC思想在應用上的具體例子。 什麼是控制反轉(IOC)? “控制”就是指一件事物對另一件事物進行一種管理,而另一件事物處在一件事物的管理之下,這就叫控制。 在面向物件程式設計的時候,每一個程式的

Spring定義bean的三種方式自動注入

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

Spring+Shiro案例分析

在 Web 專案中應用 Apache Shiro Apache Shiro 是功能強大並且容易整合的開源許可權框架,它能夠完成認證、授權、加密、會話管理等功能。認證和授權為許可權控制的核心,簡單來說,“認證”就是證明你是誰? Web 應用程式

Mybatis原始碼分析--返回ResultTypeResultMap

這一篇部落格我們來介紹一下Mybatis執行sql語句返回的結果值的到實體物件的對映機制。首先ResultType和ResultMap的使用方式是不同的。ResultType的使用方式:resultType的值為實體類<select id="getUser" param

再探迴圈依賴 → Spring 是如何判定原型迴圈依賴構造方法迴圈依賴的?

開心一刻   一天,侄子和我哥聊天,我坐在旁邊聽著   侄子:爸爸,你愛我媽媽嗎?   哥:這話說的,不愛能有你嗎?   侄子:確定有我不是因為荷爾蒙嗎?   哥:因為什麼荷爾蒙,因為愛情!   侄子:那我媽花點錢,你咋老說呢?   哥:這你就不懂了,掙錢本不易,花錢要仔細   侄子:快得了吧,掙錢這麼少,我

Spring IOC 構造方法注入注入的比較

構造子注入的配置檔案: <bean id="orderService"         class="com.lizjason.spring.OrderService">         <constructor-arg index="0" ref="or

propertyconstructor-arg注入

一、注入的方式  配置檔案的根元素是beans,每個元件使用bean元素來定義,如果使用設值注入,可以利用以下方式,來指定元件的屬性。   constructor-arg:通過建構函式注入。    p

spring 框架中的依賴注入(IOC--注入)---使用xml簡單配置檔案---的具體例項的簡單實現

體現了具體專案工程裡面的分層,dao,daoImpl,service,serviceImpl,action。讓你真正的理解這為啥分層。 畢竟當年我剛剛畢業的時候,再找工作我就不是很清楚為什麼有這麼幾層

Spring:注入用法

首先明確Java中什麼是依賴關係:   類A依賴類B的意思是,如果A的物件要完成某一操作,必須使用B的物件的某些操作來幫忙,才能完成。簡言之,B作為A的某個方法的方法引數存在。如下: class A{ public void f(B b){ } } c

Spring學習(1):控制反轉(IoC)依賴注入(DI)的詳解以及註解(annotation)開發入門案例

前言 以往的java學習中,我們要想得到一個物件,就把它new出來。如:Apple apple = new Apple(); 在一些複雜的系統中,一個物件A可能依賴於物件B,C等(程式碼表現為A類持有B,C類的物件作為A類的屬性)。以往來說,我們想要使用B,

spring 框架中的依賴注入(IOC--注入)--使用註解--的具體例項的簡單實現

體現了具體專案工程裡面的分層,dao,daoImpl,service,serviceImpl,action。讓你真正的理解這為啥分層。 順便清清楚楚的理解@Component、@Service、@Re

Spring中利用配置檔案@value注入屬性

1 簡單屬性值注入 package com.xy.test1; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service;

Spring的依賴注入( 注入)

 設值注入  設值注入是指通過setter方法傳入被呼叫者的例項。這種注入方式簡單、直觀,因而在Spring的依賴注入裡大量使用。看下面程式碼,是Person的介面//定義Person介面public interface Person{ //Person接口裡定義一個使用斧子

spring註解原始碼分析-解析注入註解配置的資源

類內部的註解,如@Autowire、@Value、@Required、@Resource以及EJB和WebService相關的註解,是容器對Bean例項化和依賴注入時,通過容器中註冊的Bean後置處理處理這些註解的。 當使用Spring的註解功能時, <cont

Spring基礎(4)——注入構造注入

設值注入:也稱屬性注入,是指通過setter()方法傳入被呼叫者的例項。這種注入方式簡單、直觀,在Spring依賴注入中也是最常用的。public interface Animal {     public void eatFood(); }public interface