本文博客地址:http://blog.youkuaiyun.com/soonfly/article/details/68498742 (转载请注明出处)
国际惯例,从一个简单的例子入门,轻松了解依赖注入。
拿之前提到的场景:
假设我们开发了一套管理系统,每收到一笔订单后,系统调用notifyservice.sendMessage给客户发送订单成功邮件。有天老板(也有可能是产品)突然要改个需求:将原来的给客户发送邮件功能改为发手机短信。你无需改动任何代码,只是在配置中将“发送器”配置成“手机发送器”,就能完成工作。
一、创建工程
这里我们选择Dynamic Web Project(动态web项目),当然也可以选择普通的Java Project。
在创建的过程中,我们给source folder增加一个config目录用于放置配置文件。在开发中,要养成归类的习惯。
二、添加Spring及相关组件
按照《02、从官网获取Spring》下载组件后,将目录lib下的jar包拷入工程。
因为spring依赖log4j.jar、commons-logging.jar两个组件,所以需要将这两个组件相关的jar(共4个)拷入工程。点此直接下载所有组件
三、写业务逻辑
代码结构如下:
接口 NotifyService.java
public interface NotifyService {
void sendMessage(String message);
}
实现 NotifyServiceByCellPhoneImpl.java
public class NotifyServiceByCellPhoneImpl implements NotifyService{
@Override
public void sendMessage(String message) {
System.out.println("发送手机短信:"+message);
}
}
实现 NotifyServiceByWeixinImpl.java
public class NotifyServiceByWeixinImpl implements NotifyService{
@Override
public void sendMessage(String message) {
System.out.println("发送微信短信:"+message);
}
}
订单类 Order.java
public class Order {
private NotifyService notifyservice;
/*notifyservice不是在内部new()出来的,
而是通过指定方法传进来的,也就是我们说的注入。这里是setter注入*/
public void setNotifyservice(NotifyService notifyservice) {
this.notifyservice = notifyservice;
}
public Order(){}
public Order(NotifyService notifyservice) {
this.notifyservice = notifyservice;
}
/*订单支付完成后,系统通知老板*/
public void PaySuccess(){
notifyservice.sendMessage("客户张铁蛋完成订单2017079657付款,共人民币:97.5元");
}
}
四、配置xml
<?xml version="1.0" encoding="UTF-8" ?>
<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.xsd">
<bean id="notify" class="twm.spring.start.NotifyServiceByWeixinImpl" />
<bean id="order" class="twm.spring.start.Order" >
<!-- 配置注入NotifyServiceByCellPhoneImpl的实例化对象 -->
<property name="notifyservice" ref="notify"/>
</bean>
</beans>
五、调用:
Test.java文件:
public class Test {
public static void main(String[] args) throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"beans.xml");
Order order=ctx.getBean("order",Order.class);
order.PaySuccess();
}
}
输出:
发送微信短信:客户张铁蛋完成订单2017079657付款,共人民币:97.5元
老板如果要求我们用手机短信发送通知,我们就到配置文件beans.xml中进行修改:
<bean id="notify" class="twm.spring.start.NotifyServiceByWeixinImpl" />
修改为
<bean id="notify" class="twm.spring.start.NotifyServiceByCellPhoneImpl" />
再次运行输出:
发送手机短信:客户张铁蛋完成订单2017079657付款,共人民币:97.5元
本文博客地址:http://blog.youkuaiyun.com/soonfly/article/details/68498742 (转载请注明出处)