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原始碼分析--返回值ResultType和ResultMap
這一篇部落格我們來介紹一下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
property和constructor-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