春天教程 - 春天松散耦合
春天教程 - 春天松散耦合
例子...
项目代码
我们将创建一个有几个类的项目。项目将以不同的格式输出数据。我们可以选择以CSV格式或JSON格式输出数据。
我们将创建一个有几个类的项目。项目将以不同的格式输出数据。我们可以选择以CSV格式或JSON格式输出数据。...
package com.java2s.output; public interface Printer { public void print(); }
之后,我们将创建CSV打印机,将输出CSV格式的数据。CSV打印机实现打印机接口。
package com.java2s.output.impl; import com.java2s.output.Printer; public class CSVPrinter implements Printer { public void print(){ System.out.println("Csv Output Printer"); } }
然后是时间创建JSON打印机将输出JSON格式的消息。JSON打印机还实现了打印机接口。
package com.java2s.output.impl; import com.java2s.output.Printer; public class JSONPrinter implements Printer { public void print(){ System.out.println("Json Output Printer"); } }
夫妇代码
我们有几种方法来使用CSVPrinter或JSONPrinter。 首先我们可以直接调用它。
package com.www.w3cschool.cnmon; import com.java2s.output.Printer; import com.java2s.output.impl.CSVPrinter; public class App { public static void main( String[] args ) { Printer output = new CSVPrinter(); output.print(); } }
这样很容易创建CSVPrinter。 但是如果我们想要改变源代码的话切换到JSONPrinter,我们将不得不更改源代码并重新编译。
对于上面的代码,它很容易改变,因为它有两行代码。 假设我们有成千上万代码和CSVPrinter已被声明了几百次。
春天
通过使用Spring依赖注入(DI),我们可以在Spring配置XML文件中声明Java Bean。 然后在xml文件中连接Java Bean。这样Spring可以使我们的打印机松散耦合到不同的打印机实现。
我们更改Helper类以接受打印机。
package com.java2s.output; import com.java2s.output.Printer; public class OutputHelper { Printer outputGenerator; public void print(){ outputGenerator.print(); } public void setOutputGenerator(Printer outputGenerator){ this.outputGenerator = outputGenerator; } }
然后我们要创建一个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.java2s.output.OutputHelper"> <property name="outputGenerator" ref="csvPrinter" /> </bean> <bean id="csvPrinter" class="com.java2s.output.impl.CSVPrinter" /> <bean id="jsonPrinter" class="com.java2s.output.impl.JSONPrinter" /> </beans>
通过Spring调用它
package com.www.w3cschool.cnmon; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.java2s.output.OutputHelper; public class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml"}); OutputHelper output = (OutputHelper)context.getBean("OutputHelper"); output.print(); } }
要切换打印机,我们只需要为不同的打印机更改Spring XML文件。当Printer更改时,我们需要修改Spring XML文件。
更多建议: