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依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot统一接口返回及全局异常处理

    Spring Boot统一接口返回及全局异常处理

    这篇文章主要介绍了Spring Boot统一接口返回及全局异常处理,文章围绕主题展开相关资料,具有一定的参考价值需要的小伙伴可以参考一下
    2022-04-04
  • SpringBoot超详细讲解事务管理

    SpringBoot超详细讲解事务管理

    事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就 回退到事务开始未进行操作的状态。事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,大部分情况下也都需要使用事务
    2022-08-08
  • idea激活ActivateJrebel热部署的方法详解

    idea激活ActivateJrebel热部署的方法详解

    这篇文章主要介绍了idea激活ActivateJrebel热部署的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java JDK的多版本共存实现方法

    Java JDK的多版本共存实现方法

    有时候系统中需要多个jdk版本共存,我们在做特定的操作时需要特定的版本,这篇文章主要给大家介绍了关于Java JDK的多版本共存实现 的相关资料,需要的朋友可以参考下
    2023-09-09
  • SpringCloud对服务内某个client进行单独配置的操作步骤

    SpringCloud对服务内某个client进行单独配置的操作步骤

    我们的微服务项目用的是springCloud,某个微服务接口因为数据处理量大,出现了接口超时的情况,我们需要单独修改这一个feignClient的超时时间,所以本文介绍了SpringCloud对服务内某个client进行单独配置的操作步骤,需要的朋友可以参考下
    2023-10-10
  • Java在利用反射条件下替换英文字母中的值

    Java在利用反射条件下替换英文字母中的值

    今天小编就为大家分享一篇关于Java在利用反射条件下替换英文字母中的值,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 详解mybatis中的if-else的嵌套使用

    详解mybatis中的if-else的嵌套使用

    本文主要介绍了mybatis中的if-else的嵌套使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Spring 实现给Bean属性注入null值

    Spring 实现给Bean属性注入null值

    这篇文章主要介绍了Spring 实现给Bean属性注入null值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Spring中Controller和RestController的区别详解

    Spring中Controller和RestController的区别详解

    这篇文章主要介绍了Spring中Controller和RestController的区别详解,@Controller是标识一个Spring类是Spring MVC controller处理器,@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面,需要的朋友可以参考下
    2023-09-09
  • Java中Date时间类的使用方法举例

    Java中Date时间类的使用方法举例

    这篇文章主要给大家介绍了关于Java中Date时间类的使用方法,在java开发中,很多字段是Date类型的,文中通过代码示例将Date时间类使用的方法介绍的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论