本文博客地址:http://blog.csdn.net/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{@Overridepublic void sendMessage(String message) {System.out.println("发送手机短信:"+message);}
}

实现 NotifyServiceByWeixinImpl.java

public class NotifyServiceByWeixinImpl implements NotifyService{@Overridepublic 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/beanshttp://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.csdn.net/soonfly/article/details/68498742 (转载请注明出处)

【Spring学习03】Spring简单入门实例相关推荐

  1. Spring Data Querydsl-JPA 的简单入门笔记

    Spring Data Querydsl-JPA 的简单入门笔记 一. Querydsl面试常识问题 1.Querydsl是什么? 二.简单项目使用 1.pom依赖 2.新增插件,自动生成Q版实体类: ...

  2. Spring MVC + Spring + Hibernate + mysql 注册登陆入门实例

    Spring MVC + Spring + Hibernate + mysql 注册登陆入门实例 (1) 结构 (说明目的是要做在线聊天室的,也包含登陆注册部分,先用这部分做个例子)开发环境用的是ST ...

  3. Spring AOP原理浅析及入门实例

    上篇问题及Spring AOP实现原理浅析 上篇说了一个AOP编程问题,那是一个错误的AOP案例.它的错误在A类中,再次粘贴A类代码: @Componentpublic class AImpl imp ...

  4. 第四阶段--Spring学习-03

    第四阶段--Spring学习 13.AOP简介 13.1 什么是AOP? 13.2 AOP作用 13.3 AOP核心概念 14.AOP入门案例 14.1 AOP入门案例思路分析 14.2 环境准备 1 ...

  5. spring学习12 -Spring 框架模块以及面试常见问题注解等

    以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式-在AOP和remoting中被用的比较 ...

  6. Spring学习之Spring三种装配机制:(一)自动化装配bean

    装配:创建应用组件(对象)之间的协作的行为,这也是Spring依赖注入(DI)的本质. Spring提供了三种装配机制: 隐式的自动装配bean: 通过java代码装配bean(显示): 通XML中装 ...

  7. SpringMVC 基础教程 简单入门实例

    spring MVC 入门教程二: 一个简单的入门实例教程 该实例的源码和实例中的jar 源码:http://download.csdn.net/detail/swingpyzf/5348563 所需 ...

  8. Spring学习笔记--spring+mybatis集成

    前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...

  9. 【Spring学习】spring开发包介绍

    spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mo ...

  10. vue服务端渲染 MySQL_vue服务端渲染简单入门实例

    想到要学习vue-ssr的同学,自不必多说,一定是熟悉了vue,并且多多少少做过几个项目.然后学习vue服务端渲染无非解决首屏渲染的白屏问题以及SEO友好. 话不多说,笔者也是研究多日才搞明白这个服务 ...

最新文章

  1. python 单继承的实现
  2. Java序列化接口Serializable接口的作用总结
  3. 计算机的教学中作用是什么,发挥计算机在教学中应有的作用
  4. 小demo, java swing窗口编程(JDK 1.6) (二)
  5. mysql 密码sha256_MySQL5.6启用sha256_password插件
  6. 【浏览器】浏览器下载CSV文件的方法
  7. 2014年最受欢迎WEB前端UI框架
  8. 以后台服务的形式启动nodejs应用
  9. Activity的神奇启动模式之singleTask
  10. 使用python下载网络上加密的ts格式视频,并用ffmpeg进行合成
  11. 9大代理服务器软件的比较与分析
  12. 将全部视频画面水平或者垂直翻转的实例教程分享
  13. 微型计算机是第四代计算机的产物,计算机的发展已经过了4代,其中()是第四代计算机 - 问答库...
  14. 一个编程A白的真实独白
  15. 亚马逊美国买家账号怎么注册
  16. 从“策略模式”聊聊“设计模式”有多重要?
  17. 记一次MySQL使用外网IP连接超时
  18. lync2010头像设置_LyncAutoAnswer.com简介-Lync 2010的开源远程工作者的自动应答信息亭
  19. 【论文翻译】ORB-SLAM: A Versatile and Accurate Monocular SLAM System
  20. php 猴子补丁,如何解决Composer安装/更新错误:VirtualAlloc()失败:[0x00000008]

热门文章

  1. android xml 设置半透明
  2. NetBeans启动firstcup错误
  3. Java中解密微信加密数据工具类
  4. XMLSpy的主要功能介绍
  5. 《Java从入门到放弃》JavaSE入门篇:单元测试
  6. 细枝末节都交给App 我只负责享受生活 | 2016与我的数字生活
  7. 饥荒联机版你的服务器无响应,饥荒联机版为什么每次创建世界都会无响应 | 手游网游页游攻略大全...
  8. html生成jsessionid,jsessionid是什么
  9. 软件无线电(SDR)及高频/高速(RF/Hi-Speed)标准集
  10. .Net(C#)腾讯信鸽推送