package com.mkyong.output;
import com.mkyong.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
public void setOutputGenerator(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
In Spring frameowork, Dependency Injection (DI) design pattern is used to define the object dependencies between each other. It exits in two major types :
- Setter Injection
- Constructor Injection
1. Setter Injection
This is the most popular and simple DI method, it will injects the dependency via a setter method.
Example
A helper class with a setter method.
<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>
You just injects a ‘CsvOutputGenerator’ bean into ‘OutputHelper’ object via a setter method (setOutputGenerator).
2. Constructor Injection
This DI method will injects the dependency via a constructor.
Example
A helper class with a constructor.
package com.mkyong.output;
import com.mkyong.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
OutputHelper(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
A bean configuration file to declare the beans and set the dependency via constructor injection (constructor-arg tag).
<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>
You just injects a ‘CsvOutputGenerator’ bean into ‘OutputHelper’ object via a constructor.
Setter or Constructor injection?
There are no hard rule set by Spring framework, just use whatever type of DI that suit your project needs. However, due to the simplicity of the setter injection, it’s always selected for most of the scenarios.
本文详细介绍了Spring框架中两种主要的依赖注入方式:Setter注入和构造器注入,并通过具体示例展示了如何配置Bean来实现依赖注入。
1101

被折叠的 条评论
为什么被折叠?



