Spring4-松耦合实例

简介:

1.创建项目,项目名称(springdemo2),如图所示

wKioL1jQkzWClO3pAAAT7a1mPIk969.png-wh_50


2.在项目中创建相应的目录(lib->jar包目录,src->源码目录,test->测试目录),目录结构如图所示

wKiom1jQk3OSijCwAAApHdhlUXo428.png-wh_50


3.在lib目录中创建子目录(apache,junit,spring)存储相应的jar包,如图所示

wKiom1jQlALTZK2hAAAyO-mE3u0657.png-wh_50


4.分别在apache,junit,spring中添加对应的jar包,如图所示

wKioL1jQlECAaO60AAB9UsiHGAk710.png-wh_50


5.对jar包进行build path,build path的过程如果不会请参照(Spring4-HelloWorld)这篇文章,jar build后目录

如图所示

wKiom1jQlQ-wrYn_AAB7diaptrA127.png-wh_50


6.在src源码目录下创建接口IOutputGenerator,包名(main.java.com.mycompany.service),如图所示

wKiom1jQmbmAqNeZAABE417FtOU106.png-wh_50

7.接口IOutputGenerator的内容如下

package main.java.com.mycompany.service;

public interface IOutputGenerator {
	public void generateOutput();
}


8.在src源码目录中创建接口IOutputGenerator的两个实现类CsvOutputGenerator,JsonOutputGenerator,包名(main.java.com.mycompany.service.impl),如图所示

wKiom1jQmk3S-mYMAABM8RPQt4A266.png-wh_50

9.实现类CsvOutputGenerator的内容如下

package main.java.com.mycompany.service.impl;

import main.java.com.mycompany.service.IOutputGenerator;

public class CsvOutputGenerator implements IOutputGenerator {

	@Override
	public void generateOutput() {
		System.out.println("Csv Output Generator");
	}

}

10.实现类JsonOutputGenerator的内容如下

package main.java.com.mycompany.service.impl;

import main.java.com.mycompany.service.IOutputGenerator;

public class JsonOutputGenerator implements IOutputGenerator{

	@Override
	public void generateOutput() {
		System.out.println("Json Output Generator");
	}
	
}


11.在src源码目录创建操作类OutputHelper,包名(main.java.com.mycompany.util),如图所示

wKioL1jQm1CB8K8uAABGC9Ioj_Q732.png-wh_50

12.操作类OutputHelper的内容如下

package main.java.com.mycompany.util;

import main.java.com.mycompany.service.IOutputGenerator;

public class OutputHelper {
	IOutputGenerator outputGenerator;
	
	public void generateOutput(){
		outputGenerator.generateOutput();
	}
	
	public void setOutputGenerator(IOutputGenerator outputGenerator){
		this.outputGenerator = outputGenerator;
	}
}


13.在src源码目录创建配置文件applicationContext.xml,如图所示

wKioL1jQm6yhYI6NAAA-Pemj6jw298.png-wh_50

14.配置文件applicationContext.xml的内容如下

<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-3.0.xsd">

	<bean id="OutputHelper" class="main.java.com.mycompany.util.OutputHelper">
		<property name="outputGenerator" ref="CsvOutputGenerator"></property>
	</bean>
	
	<bean id="CsvOutputGenerator" class="main.java.com.mycompany.service.impl.CsvOutputGenerator">
	</bean>
	<bean id="JsonOutputGenerator" class="main.java.com.mycompany.service.impl.JsonOutputGenerator">
	</bean>

</beans>


15.在test测试目录中创建测试类OutputHelperTest,包名(main.java.com.mycompany.util),如图所示

wKioL1jQnCSyaDY6AABLHcXqS-E802.png-wh_50

16.测试类OutputHelperTest的内容如下

package main.java.com.mycompany.util;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class OutputHelperTest {
	
	@Test
	public void outputHelperTest(){
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		OutputHelper output = (OutputHelper) context.getBean("OutputHelper");
		output.generateOutput();
	}
}


17.在outputHelperTest方法上右键运行Run as -> Junit Test,运行结果如图所示

wKiom1jQnLSx1r_yAAE3XwOTmfc507.png-wh_50


18.修改applicationContext.xml文件,如图所示

wKioL1jQnSTiwhWQAABbyCcXqX0604.png-wh_50

19.修改applicationContext.xml文件的内容如下

<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-3.0.xsd">

	<bean id="OutputHelper" class="main.java.com.mycompany.util.OutputHelper">
		<property name="outputGenerator" ref="JsonOutputGenerator"></property>
	</bean>
	
	<bean id="CsvOutputGenerator" class="main.java.com.mycompany.service.impl.CsvOutputGenerator">
	</bean>
	<bean id="JsonOutputGenerator" class="main.java.com.mycompany.service.impl.JsonOutputGenerator">
	</bean>

</beans>


20.再运行OutputHelperTest类中的outputHelperTest方法,如图所示

wKiom1jQnZCgOKhBAAE7IeI2YA4459.png-wh_50


21.在没有对代码进行任何的修改情况下,只修改了applicationContext.xml文件,则切换了接口的不同实现方式.

wKiom1jUideDpw5CAABwCKMO5XE057.png-wh_50


本文转自 素颜猪 51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1908705


相关文章
|
6月前
|
设计模式 Java Spring
【Spring源码】WebSocket做推送动作的底层实例是谁
我们都知道WebSocket可以主动推送消息给用户,那做推送动作的底层实例究竟是谁?我们先整体看下整个模块的组织机构。可以看到handleMessage方法定义了每个消息格式采用不同的消息处理方法,而这些方法该类并**没有实现**,而是留给了子类去实现。
【Spring源码】WebSocket做推送动作的底层实例是谁
|
6月前
|
监控 Java 数据处理
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
|
4月前
|
消息中间件 Java Kafka
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
Spring boot 自定义kafkaTemplate的bean实例进行生产消息和发送消息
190 5
|
3月前
|
XML Java 数据库
Spring5入门到实战------10、操作术语解释--Aspectj注解开发实例。AOP切面编程的实际应用
这篇文章是Spring5框架的实战教程,详细解释了AOP的关键术语,包括连接点、切入点、通知、切面,并展示了如何使用AspectJ注解来开发AOP实例,包括切入点表达式的编写、增强方法的配置、代理对象的创建和优先级设置,以及如何通过注解方式实现完全的AOP配置。
|
3月前
|
Java Spring
Spring Boot Admin 离线实例
Spring Boot Admin 离线实例
28 0
|
5月前
|
Java Maven Spring
Spring中AOP最简单实例-@注解形式
Spring中AOP最简单实例-@注解形式
41 0
|
5月前
|
XML Java Maven
Spring中AOP最简单实例-XML形式
Spring中AOP最简单实例-XML形式
25 0
|
5月前
|
移动开发 Java Maven
基于OSGi的Virgo Server最简单Spring web实例
基于OSGi的Virgo Server最简单Spring web实例
67 0
|
6月前
|
消息中间件 人工智能 Java
Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动
Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动
165 1
|
6月前
|
XML 设计模式 Java
依赖注入艺术:探索Spring如何实现松耦合的神奇
依赖注入艺术:探索Spring如何实现松耦合的神奇
106 0
依赖注入艺术:探索Spring如何实现松耦合的神奇
下一篇
无影云桌面