在Spring框架中,依赖注入设计模式主要用来定义对象之间的依赖,存在两种主要类型
1)setter注入(设置器)
2)constructor注入(构造器)
1.Setter注入
是最流行最简单的DI方法,通过一个setter方法来完成依赖。
例子:
一个有一个setter方法的Helper类
package com.mkyong.output;
import com.mkyong.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
public void setOutputGenerator(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
再写一个bean配合iwenjianshengming这些bean,并且通过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.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方法把CsvOutputGenerator注入进去就行了
2.Constructor注入
这种方式是通过一个构造函数来完成依赖设置的
例子:
一个有着一个构造函数的Helper类
package com.mkyong.output;
import com.mkyong.output.IOutputGenerator;
public class OutputHelper
{
IOutputGenerator outputGenerator;
OutputHelper(IOutputGenerator outputGenerator){
this.outputGenerator = outputGenerator;
}
}
然后当然是一个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>
<ref bean="JsonOutputGenerator" />
</constructor-arg>
</bean>
<bean id="CsvOutputGenerator" class="com.mkyong.output.impl.CsvOutputGenerator" />
<bean id="JsonOutputGenerator" class="com.mkyong.output.impl.JsonOutputGenerator" />
</beans>
该选哪个?
没有硬性规定,哪个合适就用那个,由于setter的简单性,一般还是setter用得多。