詳解Spring 兩種注入的方式(Set和構(gòu)造)實(shí)例
依賴注入是指對(duì)象之間關(guān)系的控制權(quán)由應(yīng)用代碼中轉(zhuǎn)到外部容器。Spring框架主要提供了Set注入和構(gòu)造注入兩種依賴注入方式。
1:Set注入指的就是在接受注入的類中定義一個(gè)要被注入的類型的一個(gè)set方法,并在參數(shù)中定義需要注入的元素。Set注入式一種裝配Bean屬性的直接方法,但Set注入的一個(gè)缺點(diǎn)就是它假設(shè)了所有的可變屬性都可以通過(guò)set方法訪問(wèn)到,無(wú)法清晰地表示哪些屬性是必須的,哪些屬性是可選的。
2:構(gòu)造注入是在接收注入的類中定義一個(gè)構(gòu)造方法,并在構(gòu)造方法中定義需要注入的參數(shù)。構(gòu)造注入方式的優(yōu)勢(shì)是通過(guò)構(gòu)造方法來(lái)強(qiáng)制依賴關(guān)系。
下面介紹一下兩種方式的用法:
一:在Myeclipse中(筆者使用的是Myeclipse10版本)新建一個(gè)項(xiàng)目(Java project或者web project都可)
二:右鍵項(xiàng)目 - MyEclipse - Add Spring Capabilities(添加Spring支持),選擇3.0版本并添加引用核心類庫(kù),點(diǎn)擊下一步。
三:選擇新創(chuàng)建一個(gè)spring bean 配置文件放到項(xiàng)目src目錄下。
四:點(diǎn)擊下一步,指定hibernate 配置頁(yè),直接默認(rèn),點(diǎn)擊完成即可。
五:新建類 HelloWorld.Java
package com.xiami.spring;
public class HelloWorld {
private String str;
/**
* 默認(rèn)構(gòu)造方法
*/
public HelloWorld() {
}
/**
* 用來(lái)進(jìn)行構(gòu)造注入的構(gòu)造方法
*
* @param str
*/
public HelloWorld(String str) {
this.str = str;
}
/**
* 用來(lái)進(jìn)行Set注入的方法
* @param str
*/
public void setStr(String str) {
this.str = str;
}
/**
* 輸出字符串的方法
*/
public void sayHello() {
System.out.println(str);
}
}
六:新建測(cè)試類Test.java
package com.xiami.spring;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//載入spring配置文件
BeanFactory bFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
HelloWorld helloWorld = (HelloWorld) bFactory.getBean("helloService");
helloWorld.sayHello();
}
}
七:打開(kāi)applicationContext.xml文件,進(jìn)行添加bean配置
以下是兩種方式添加bean:
1:采用Set注入方式的Bean類的配置
右擊applicationContext.xml的編輯界面 - Spring - new bean 打開(kāi)Bean向?qū)Т翱?,填?xiě)B(tài)ean Id(自定義命名和Test.java中g(shù)etBean("???")對(duì)應(yīng)。Bean class 選擇要注入的HelloWorld類。點(diǎn)擊Properties屬性選項(xiàng)卡,給該bean新建一個(gè)屬性。
八:在屬性向?qū)Т翱谔顚?xiě) Name 對(duì)應(yīng)HelloWorld.java中的屬性名稱,Spring Type 選擇value,type選擇String,Value 隨便填值。finish 既可。
九:保存applicationContext.xml, 添加bean后,配置文件多了紅色標(biāo)記的部分,讀者可以運(yùn)行Test.java。測(cè)試一下。發(fā)現(xiàn)hello world字符串已經(jīng)注入到了str變量上。
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 使用Set方式注入 -->
<!--
<span style="color:#ff0000;"><bean id="helloService" class="com.xiami.spring.HelloWorld"
abstract="false" lazy-init="default" autowire="default">
<property name="str">
<value type="java.lang.String">hello world</value>
</property>
</bean></span>
-->
<!-- 使用構(gòu)造方法方式注入
<bean id="helloService" class="com.xiami.spring.HelloWorld"
abstract="false" lazy-init="default" autowire="default">
<constructor-arg>
<value type="java.lang.String">構(gòu)造方法注入方式</value>
</constructor-arg>
</bean>
-->
</beans>
2:采用構(gòu)造注入方式的Bean類的配置
在以上Set方式的Bean Wizard(Bean 向?qū)В┐翱?,不選擇Properties選項(xiàng)卡,變?yōu)镃onstructor Args選項(xiàng)卡。并Add 新增一個(gè)構(gòu)造參數(shù)。Index和Java Class 不用填寫(xiě)。
十:在增加構(gòu)造方式bean的時(shí)候,之前第一個(gè)得先注釋或者刪除,不允許有多個(gè)id相同的bean。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Java中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式的相關(guān)算法原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-03-03
詳解Springboot 優(yōu)雅停止服務(wù)的幾種方法
這篇文章主要介紹了詳解Springboot 優(yōu)雅停止服務(wù)的幾種方法 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程
這篇文章主要為大家詳細(xì)介紹了Ubuntu16.04安裝部署solr7的圖文詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Java中的抽象工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
抽象工廠模式是工廠方法模式的升級(jí)版本,他用來(lái)創(chuàng)建一組相關(guān)或者相互依賴的對(duì)象。下面通過(guò)本文給大家分享Java中的抽象工廠模式,感興趣的朋友一起看看吧2017-08-08
Java ThreadLocal的設(shè)計(jì)理念與作用
這篇文章主要介紹了Java ThreadLocal的設(shè)計(jì)理念與作用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
druid配置數(shù)據(jù)庫(kù)連接使用密文密碼方式
這篇文章主要介紹了druid配置數(shù)據(jù)庫(kù)連接使用密文密碼方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,2023-12-12
Java躲不過(guò)設(shè)計(jì)模式的坑之代理模式詳解
設(shè)計(jì)模式看來(lái)更像是一種設(shè)計(jì)思維或設(shè)計(jì)思想,為你的項(xiàng)目工程提供方向,讓你的項(xiàng)目工程更加健壯、靈活,延續(xù)生命力。本文即將分享的是設(shè)計(jì)模式的其中一種:代理模式,感興趣的可以了解一下2022-09-09
IDEA MyBatis Plugins自動(dòng)生成實(shí)體類和mapper.xml
這篇文章主要介紹了IDEA MyBatis Plugins自動(dòng)生成實(shí)體類和mapper.xml,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

