日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring中的依赖注入——构造函数注入、set方法注入( 更常用的方式)、复杂类型的注入/集合类型的注入

發布時間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring中的依赖注入——构造函数注入、set方法注入( 更常用的方式)、复杂类型的注入/集合类型的注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

spring中的依賴注入

依賴注入: Dependency Injection IOC的作用:降低程序間的耦合(依賴關系) 依賴關系的管理:以后都交給spring來維護。在當前類需要用到其他類的對象,由spring為我們提供,我們只需要在配置文件中說明 依賴關系的維護:就稱之為依賴注入
依賴注入:能注入的數據:有三類 基本類型和String其他bean類型(在配置文件中或者注解配置過的bean)復雜類型/集合類型注入的方式:有三種 第一種:使用構造函數提供第二種:使用set方法提供第三種:使用注解提供

IAccountService.java

package com.itheima.service;/*** 賬戶業務層的接口*/ public interface IAccountService {/*** 模擬保存賬戶*/void saveAccount(); }

AccountServiceImpl.java

package com.itheima.service.impl;import com.itheima.service.IAccountService;import java.util.Date;/*** 賬戶的業務層實現類*/ public class AccountServiceImpl implements IAccountService {//如果是經常變化的數據,并不適用于注入的方式private String name;private Integer age;private Date birthday;public AccountServiceImpl(String name,Integer age,Date birthday){this.name = name;this.age = age;this.birthday = birthday;}public void saveAccount(){System.out.println("service中的saveAccount方法執行了。。。"+name+","+age+","+birthday);}}

構造函數注入
?

? ? 使用的標簽:constructor-arg
??? 標簽出現的位置:bean標簽的內部
??? 標簽中的屬性
??????? type:用于指定要注入的數據的數據類型,該數據類型也是構造函數中某個或某些參數的類型
??????? index:用于指定要注入的數據給構造函數中指定索引位置的參數賦值。索引的位置是從0開始
??????? name:用于指定給構造函數中指定名稱的參數賦值??????????????????????????????????????? 常用的
??????? =============以上三個用于指定給構造函數中哪個參數賦值===============================
??????? value:用于提供基本類型和String類型的數據
??????? ref:用于指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象

??? 優勢:
??????? 在獲取bean對象時,注入數據是必須的操作,否則對象無法創建成功。

??? 弊端:
??????? 改變了bean對象的實例化方式,使我們在創建對象時,如果用不到這些數據,也必須提供。


Client.java

package com.itheima.ui;import com.itheima.service.IAccountService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 模擬一個表現層,用于調用業務層*/ public class Client {public static void main(String[] args) {//1.獲取核心容器對象ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.根據id獲取Bean對象IAccountService as = (IAccountService)ac.getBean("accountService");as.saveAccount();} }

bean.xml



set方法注入??????????????? 更常用的方式

? ? 涉及的標簽:property
??? 出現的位置:bean標簽的內部

??? 標簽的屬性
??????? name:用于指定注入時所調用的set方法名稱
??????? value:用于提供基本類型和String類型的數據
??????? ref:用于指定其他的bean類型數據。它指的就是在spring的Ioc核心容器中出現過的bean對象

??? 優勢:
??????? 創建對象時沒有明確的限制,可以直接使用默認構造函數
??? 弊端:
??????? 如果有某個成員必須有值,則獲取對象是有可能set方法沒有執行。


AccountServiceImpl2.java

package com.itheima.service.impl;import com.itheima.service.IAccountService;import java.util.Date;/*** 賬戶的業務層實現類*/ public class AccountServiceImpl2 implements IAccountService {//如果是經常變化的數據,并不適用于注入的方式private String name;private Integer age;private Date birthday;public void setName(String name) {this.name = name;}public void setAge(Integer age) {this.age = age;}public void setBirthday(Date birthday) {this.birthday = birthday;}public void saveAccount(){System.out.println("service中的saveAccount方法執行了。。。"+name+","+age+","+birthday);}}

bean.xml

Client.java

package com.itheima.ui;import com.itheima.service.IAccountService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 模擬一個表現層,用于調用業務層*/ public class Client {public static void main(String[] args) {//1.獲取核心容器對象ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");IAccountService as = (IAccountService)ac.getBean("accountService2");as.saveAccount();} }


復雜類型的注入/集合類型的注入

? ? 用于給List結構集合注入的標簽: list array set


???????
??? 用于個Map結構集合注入的標簽:map? props


???????
??? 結構相同,標簽可以互換


AccountServiceImpl3.java

package com.itheima.service.impl;import com.itheima.service.IAccountService;import java.util.Arrays; import java.util.List; import java.util.Properties; import java.util.Set; import java.util.Map;/*** 賬戶的業務層實現類*/ public class AccountServiceImpl3 implements IAccountService {private String[] myStrs;private List<String> myList;private Set<String> mySet;private Map<String,String> myMap;private Properties myProps;public void setMyStrs(String[] myStrs) {this.myStrs = myStrs;}public void setMyList(List<String> myList) {this.myList = myList;}public void setMySet(Set<String> mySet) {this.mySet = mySet;}public void setMyMap(Map<String, String> myMap) {this.myMap = myMap;}public void setMyProps(Properties myProps) {this.myProps = myProps;}public void saveAccount(){System.out.println(Arrays.toString(myStrs));System.out.println(myList);System.out.println(mySet);System.out.println(myMap);System.out.println(myProps);} }

bean.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="accountService3" class="com.itheima.service.impl.AccountServiceImpl3"><property name="myStrs"><set><value>AAA</value><value>BBB</value><value>CCC</value></set></property><property name="myList"><array><value>AAA</value><value>BBB</value><value>CCC</value></array></property><property name="mySet"><list><value>AAA</value><value>BBB</value><value>CCC</value></list></property><property name="myMap"><props><prop key="testC">ccc</prop><prop key="testD">ddd</prop></props></property><property name="myProps"><map><entry key="testA" value="aaa"></entry><entry key="testB"><value>BBB</value></entry></map></property></bean></beans>

Client.java

package com.itheima.ui;import com.itheima.service.IAccountService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 模擬一個表現層,用于調用業務層*/ public class Client {public static void main(String[] args) {//1.獲取核心容器對象ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");IAccountService as = (IAccountService)ac.getBean("accountService3");as.saveAccount();} }

總結

以上是生活随笔為你收集整理的spring中的依赖注入——构造函数注入、set方法注入( 更常用的方式)、复杂类型的注入/集合类型的注入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。