Spring IOC (DI) 依赖注入的四种方式示例详解

 更新时间:2023年06月26日 11:45:17   作者:清潇和梨花  
这篇文章主要介绍了Spring IOC (DI) 依赖注入的四种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

依赖注入的四种方式:

set 注入

赋值,默认使用的是set() 方法,依赖注入底层是通过反射实现的

<bean id="student" class="cust.zaw.entity.Student">
	<property name="stuName" value="lc"></property>
</bean>

构造器注入

使用构造方法注入

<bean id="student" class="cust.zaw.entity.Student">
参数顺序相同的话,可以不写index
<constructor-arg value=""></constructor-arg>
参数顺序不同的话,写index或者name或者type
<constructor-arg value="" index=“0”></constructor-arg>
<constructor-arg value="" index=“1”></constructor-arg>
<constructor-arg value="" name=“”></constructor-arg>
<constructor-arg value="" type=“”></constructor-arg>
</bean>

p命名空间注入

引入命名空间就是加一句话:xmlns:p=“http://www.springframework.org/schema/p”

也可以这样引入,它会自动引入命名空间

引入命名空间后,就可以这样以这样的方式实现依赖注入

<bean id="student" class="cust.zaw.entity.Student" p:stuAge="" p:stuName="" p:stuNO-ref="">
</bean>
  • 注意:

无论是String 还是int / short / long ,在赋值时都是value=“值”,因此建议 配合type / name 进行区分

  • IOC 容器赋值:

简单类型,value=“”对象类型(当一个类中有其他类 类型,为其赋值时使用),ref=“需要引用的id值”

注入各种集合数据类型

List Set Map properties

写一个实体类

package cust.zaw.entity;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class AllCollectionType {
	private List<String> list;
	private String[] array;
	private Set<String> set;
	private Map<String,String> map;
	private Properties props;
	public List<String> getList() {
		return list;
	}
	public void setList(List<String> list) {
		this.list = list;
	}
	public String[] getArray() {
		return array;
	}
	public void setArray(String[] array) {
		this.array = array;
	}
	public Set<String> getSet() {
		return set;
	}
	public void setSet(Set<String> set) {
		this.set = set;
	}
	public Map<String, String> getMap() {
		return map;
	}
	public void setMap(Map<String, String> map) {
		this.map = map;
	}
	public Properties getProps() {
		return props;
	}
	public void setProps(Properties props) {
		this.props = props;
	}
	@Override
	public String toString() {
		String strContent=null;
		for(String str : array) {
			strContent +=str + ",";
		}
		return "AllCollectionType [getList()=" + getList() + ", getArray()=" + Arrays.toString(getArray())
				+ ", getSet()=" + getSet() + ", getMap()=" + getMap() + ", getProps()=" + getProps() + "]"+strContent;
	}
}

编写配置文件

<bean id="collectionDemo" class="cust.zaw.entity.AllCollectionType">
		<property name="list">
			<list>
				<value>足球</value>
				<value>篮球</value>
				<value>乒乓球</value>
			</list>
		</property>
		<property name="array">
			<array>
				<value>足球1</value>
				<value>篮球1</value>
				<value>乒乓球1</value>
			</array>
		</property>
		<property name="set">
			<set>
				<value>足球2</value>
				<value>篮球2</value>
				<value>乒乓球2</value>
			</set>
		</property>
		<property name="map">
			<map>
				<entry>
					<key>
						<value>football3</value>
					</key>
					<value>足球3</value>
				</entry>
				<entry>
					<key>
						<value>basketball3</value>
					</key>
					<value>篮球3</value>
				</entry>
				<entry>
					<key>
						<value>ppq3</value>
					</key>
					<value>乒乓球3</value>
				</entry>
			</map>
		</property>
		<property name="props">
			<props>
				<prop key="football4">足球4</prop>
				<prop key="baskball4">篮球4</prop>
				<prop key="pp4">乒乓球4</prop>
			</props>
		</property>		
	</bean>

获取输出

public static void collectionDemp() {
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        AllCollectionType type=(AllCollectionType)context.getBean("collectionDemo");
        System.out.println(type);
    }

给对象类型赋值null:

<!-- 注意没有<value> -->
<property name="name">
			<null/>
</property>

赋空值

<property name="name">
			<value></value>
</property>

自动装配注入(只适用于 ref 类型):

约定优于配置

  • byName:自动寻找:其他bean的id值 = 该Course类的属性名
  • byType:其他类型(class)是否与该Course类的ref 属性类型一致
  • (必须满足当前ioc容器只有一个bean满足)
  • constructor:其他bean的类型(class)是否与该Course 类的构造方法参数 的类型一致;
<!--
		autowire="byName"
		Course类中有一个ref属性teacher(属性名),并且该ioc容器中恰好有一个 bean的id也是teacher
		bean的id=类的属性名 
 -->
<bean id="student" class="cust.zaw.entity.Student" autowire="byName">
		<property name="stuNO" value="2"></property>
		<property name="stuName" value="lc"></property>
		<property name="stuAge" value="24"></property>
		<!-- <property name="teacher" ref="teacher"></property>-->
</bean>

可以在头文件中,一次性将ioc容器的所有bean 统一设置成自动装配自动装配虽然可以减少代码量,但是会降低程序可读性

<beans xmlns="http://www.springframework.org/schema/beans"
	....
	default-autowire="byName">

到此这篇关于Spring IOC (DI) 依赖注入的四种方式的文章就介绍到这了,更多相关Spring IOC依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java基础的详细了解第四天

    java基础的详细了解第四天

    这篇文章对Java编程语言的基础知识作了一个较为全面的汇总,在这里给大家分享一下。需要的朋友可以参考,希望能给你带来帮助
    2021-08-08
  • Spring:@Async注解和AsyncResult与CompletableFuture使用问题

    Spring:@Async注解和AsyncResult与CompletableFuture使用问题

    这篇文章主要介绍了Spring:@Async注解和AsyncResult与CompletableFuture使用问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java类的定义以及执行顺序学习教程

    Java类的定义以及执行顺序学习教程

    这篇文章主要介绍了Java类的定义以及执行顺序学习教程,包括对象的创建等面向对象编程的基础知识,需要的朋友可以参考下
    2015-09-09
  • MyBatis缓存实现原理及代码实例解析

    MyBatis缓存实现原理及代码实例解析

    这篇文章主要介绍了MyBatis缓存实现原理及代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 分隔List集合,按指定大小,将集合分成多个的方法

    分隔List集合,按指定大小,将集合分成多个的方法

    下面小编就为大家带来一篇分隔List集合,按指定大小,将集合分成多个的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • JDK8中新增的Optional工具类基本使用

    JDK8中新增的Optional工具类基本使用

    Optional不是对null关键字的一种替代,而是对于null判定提供了一种更加优雅的实现,接下来通过本文给大家分享JDK8中新增的Optional工具类基本使用,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • SpringBoot2新特性 自定义端点详解

    SpringBoot2新特性 自定义端点详解

    这篇文章主要介绍了SpringBoot2新特性 自定义端点详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java File类提供的方法与操作

    Java File类提供的方法与操作

    Java使用File类来表示计算机系统磁盘文件的对象类型。File中提供了大量的方法,可以对文件进行增加、删除、修改、重命名等常规操作。File类的对象会存储文件自身的信息,例如文件在系统中的存储目录、文件大小、文件读写权限等
    2023-03-03
  • 通过Spring层面进行事务回滚的实现

    通过Spring层面进行事务回滚的实现

    本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • 在Mybatis中association标签多层嵌套的问题

    在Mybatis中association标签多层嵌套的问题

    这篇文章主要介绍了在Mybatis中association标签多层嵌套的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论