codecamp

Spring教程 - Spring Setter注入

Spring教程 - Spring Setter注入


Spring Setter注入是最流行和简单的依赖注入方法,它将通过setter方法注入依赖关系。

在Setter依赖注入中,IoC容器注入一个Java Bean的依赖通过JavaBean风格的setter方法。

Java Bean的setters公开了IoC容器可以管理的依赖关系。

在实践中,Setter注射是最广泛使用的注射机制,它是一个最简单的IoC机制来实现。

例子

假设我们定义了以下接口和Java bean。

package com.www.w3cschool.cnmon;
public interface Printer
{
  public void print();
}

之后,我们将创建CSV打印机,将输出CSV格式的数据。CSV打印机实现打印机接口。

package com.www.w3cschool.cnmon;
public class CSVPrinter implements Printer
{
  public void print(){
    System.out.println("Csv Output Printer");
  }
}

然后是时间创建JSON打印机将输出JSON格式的消息。JSON打印机还实现了打印机接口。

package com.www.w3cschool.cnmon;
public class JSONPrinter implements Printer
{
  public void print(){
    System.out.println("Json Output Printer");
  }
}

通过使用Spring依赖注入(DI),我们可以在Spring配置XML文件中声明Java Bean。 然后在xml文件中连接Java Bean。这样Spring可以使我们的打印机松散耦合到不同的打印机实现。

通过使用Spring依赖注入(DI),我们可以在Spring配置XML文件中声明Java Bean。 然后在xml文件中连接Java Bean。这样Spring可以使我们的打印机松散耦合到不同的打印机实现。...

package com.www.w3cschool.cnmon;
public class OutputHelper
{
  Printer outputGenerator;
  public void print(){
    outputGenerator.print();
  }
  public void setOutputGenerator(Printer outputGenerator){
    this.outputGenerator = outputGenerator;
  }
}


XML配置

然后我们要创建一个Spring bean配置文件并在此处声明所有Java对象依赖关系。

<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.www.w3cschool.cnmon.OutputHelper">
    <property name="outputGenerator" ref="csvPrinter" />
  </bean>
  <bean id="csvPrinter" class="com.www.w3cschool.cnmon.CSVPrinter" />
  <bean id="jsonPrinter" class="com.www.w3cschool.cnmon.JSONPrinter" />
</beans>

以下两个bean标签在Spring配置xml文件中声明了两个Java Bean。

在声明之后,我们可以使用id值来引用Java Bean。

<bean id="csvPrinter" class="com.www.w3cschool.cnmon.CSVPrinter" />
<bean id="jsonPrinter" class="com.www.w3cschool.cnmon.JSONPrinter" />

以下xml bean标记声明了 OutputHelper 和通过使用属性标记通过setter注入注入依赖。

<bean id="outputHelper" class="com.www.w3cschool.cnmon.OutputHelper">
  <property name="outputGenerator" ref="csvPrinter" />
</bean>

在上面的代码中,我们只是注入一个“com.www.w3cschool.cnmon.CSVPrinter"bean通过setter方法setOutput Generator转换为“Output Helper"对象。



加载配置和运行

以下代码显示如何使用加载配置并运行它。

package com.www.w3cschool.cnmon;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
  public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext(
        "SpringBeans.xml");
    OutputHelper output = (OutputHelper)context.getBean("outputHelper");
      output.print();
  }
}

输出


Download Java2s_Spring_Setter_Injection.zip
Spring教程 - Spring构造函数注入
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }