Spring 专题
专题目录
您的位置:java > Spring专题 > Spring依赖注入(DI)
Spring依赖注入(DI)
作者:--    发布时间:2019-11-20
在spring框架中,依赖注入(di)的设计模式是用来定义对象彼此间的依赖。它主要有两种类型:
  • setter方法注入
  • 构造器注入

1. setter方法注入

这是最流行最简单的di注入方法,通过设置方法注入依赖。

示例

帮助器类和指定的setter方法
package com.h3.output;

import com.h3.output.ioutputgenerator;

public class outputhelper
{
	ioutputgenerator outputgenerator;
	
	public void setoutputgenerator(ioutputgenerator outputgenerator){
		this.outputgenerator = outputgenerator;
	}
	
}
一个 bean 配置文件用来声明bean 和通过 setter 设置注入(property标签)的依赖。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="outputhelper" class="com.h3.output.outputhelper">
		<property name="outputgenerator">
			<ref bean="csvoutputgenerator" />
		</property>
	</bean>
	
<bean id="csvoutputgenerator" class="com.h3.output.impl.csvoutputgenerator" />
<bean id="jsonoutputgenerator" class="com.h3.output.impl.jsonoutputgenerator" />
		
</beans>
只需注入一个“csvoutputgenerator” bean 到 “outputhelper”对象,通过一个 setter 方法(setoutputgenerator)。

2.构造函数注入

此di方法将通过构造函数注入依赖。

示例

一个辅助类的构造函数。
package com.h3.output;

import com.h3.output.ioutputgenerator;

public class outputhelper
{
	ioutputgenerator outputgenerator;
	
        outputhelper(ioutputgenerator outputgenerator){
		this.outputgenerator = outputgenerator;
	}
}
bean 配置文件来声明bean并通过构造函数(constructor-arg标签)设置注入依赖。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="outputhelper" class="com.h3.output.outputhelper">
		<constructor-arg>
			<bean class="com.h3.output.impl.csvoutputgenerator" />
		</constructor-arg>
	</bean>
	
<bean id="csvoutputgenerator" class="com.h3.output.impl.csvoutputgenerator" />
<bean id="jsonoutputgenerator" class="com.h3.output.impl.jsonoutputgenerator" />
		
</beans>
只需通过一个构造函数注入一个 “csvoutputgenerator” bean 到 “outputhelper” 对象。

setter方法还是构造函数注入?

spring框架的设置有没有硬性规定,只需要使用适合你的项目需要的类型注入。然而,由于setter方法注入简单,它总是大部分使用场景的选择。

参考

1. http://en.wikipedia.org/wiki/dependency_injection


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册