在Spring框架中,依赖注入(DI)设计模式用于定义彼此之间的对象依赖。 它以两种主要类型退出:
- 二传手注射
- 构造函数注入
1.二传手注射
这是最流行和最简单的DI方法,它将通过setter方法注入依赖项。
例
具有setter方法的帮助程序类。
package com.mkyong.output;
import com.mkyong.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
public void setOutputGenerator(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
一个bean配置文件,用于声明bean并通过setter注入(属性标记)设置依赖性。
<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.mkyong.output.OutputHelper">
<property name="outputGenerator">
<ref bean="CsvOutputGenerator" />
</property>
</bean>
<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator" />
<bean id="JsonOutputGenerator" class="com.mkyong.output.impl.JsonOutputGenerator" />
</beans>
您只需通过setter方法(setOutputGenerator)将'CsvOutputGenerator'bean注入'OutputHelper'对象。
2.构造函数注入
该DI方法将通过构造函数注入依赖项。
例
具有构造函数的帮助程序类。
package com.mkyong.output;
import com.mkyong.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.mkyong.output.OutputHelper">
<constructor-arg>
<bean class="com.mkyong.output.impl.CsvOutputGenerator" />
</constructor-arg>
</bean>
<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator" />
<bean id="JsonOutputGenerator" class="com.mkyong.output.impl.JsonOutputGenerator" />
</beans>
您只需通过构造函数将“ CsvOutputGenerator” bean注入“ OutputHelper”对象。
二传手或构造函数注入?
Spring框架没有设置硬性规则,仅使用适合您项目需求的任何类型的DI。 但是,由于setter注入的简单性,大多数情况下始终选择它。
参考
1. http://en.wikipedia.org/wiki/Dependency_injection
标签: 春天
翻译自: https://mkyong.com/spring/spring-dependency-injection-di/