【Spring学习03】Spring简单入门实例

2023-11-12

本文博客地址: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{
    @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.csdn.net/soonfly/article/details/68498742 (转载请注明出处)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Spring学习03】Spring简单入门实例 的相关文章

随机推荐

  • 基于vue实现钉钉审批流程(仿)

    做项目有个需求 实现审批流程 看了钉钉审批流感觉功能很强大 模仿其实现审批效果 效果图 没有找到windows录制视频转gif的软件 所以只能放一张静图了 有好的软件欢迎各位积极分享 代码位置 整个流程上传至github https git
  • 数据库字段为什么要使用NOT NULL

    目录 1 对程序的影响 2 对查询结果的影响 2 1 聚合函数count 不准确 2 1 与 失效 2 3 NULL与其他值运算结果为NULL 2 4 对distinct group by order by等排序结果的影响 3 对索引的影响
  • html文本延迟加载,LazyLoad 延迟加载(按需加载)

    1 实际需求 大型网站往往很矛盾 想用户在首页看到更多东西 又不想浪费太多服务器流量 比如一个有3屏的首页 可能50 的用户进首页的目的是点击首页的连接 到子页面 那么我们的网站却为100 的用户加载了 3个 屏幕的所有内容 如果可以按需加
  • HIT-ICS2019大作业-程序人生-Hello’s P2P

    HIT ICS2019大作业 程序人生 Hello s P2P 摘 要 本文以一个简单的C程序hello c为楔子描绘了从预处理一直到I O管理的计算机的内部原理 将计算机对程序的处理过程生动地展现在人们眼前 关键词 hello 程序 P2
  • 1157:哥德巴赫猜想(C C++)

    题目描述 哥德巴赫猜想的命题之一是 大于6 的偶数等于两个素数之和 编程将6 100所有偶数表示成两个素数之和 输入 无 输出 分行输出 例如 6 3 3 8 3 5 每个数只拆开一次 请保证第一个加数最小 输入样例 无 输出样例 无 代码
  • Simulink 学习(一)

    一 基本操作 Simulink多用于仿真 分为模块 输入 输出 matlab中 有两种方法打开 第一种就如图所示 第二种直接在命令窗口输入 simulink 模块库 例如 常量倍数放大利用Math Oprations中的Gain模块 双击可
  • koa-view架构分析

    根据后端的模板引擎渲染到模板上 如ejs 安装 npm install koa views save registry https registry npm taobao org 安装ejs npm install ejs save reg
  • Gin框架使用Casbin进行用户权限校验

    以下是测试项目目录 一 配置model conf casbin rbac model conf 请求 request definition r sub obj act sub gt 想要访问资源的用户角色 Subject 请求实体 obj
  • TensorFlow学习笔记2-Anaconda下安装matplotlib的方法

    文章在下述博文的基础上删减 http blog csdn net abvedu article details 54731713 安装好Anaconda后 在Anaconda Prompt下执行conda命令安装matplotlib包 执行
  • JavaScript 宏任务和微任务

    JavaScript 宏观任务和微观任务 概念 宏观任务 宿主发起的任务为宏观任务 如setTimeout setInterval setImmediate I O 微观任务 JavaScript引擎发起的任务为微观任务 如Promise
  • 计算机组成原理——指令系统题库

    指令系统题库 选择题 1 以下有关指令系统的说法中错误的是什么 A 指令系统是一台机器硬件能执行的指令全体 B 任何程序运行前都要先转化为机器语言 C 指令系统是计算机软件 硬件的界面 D 指令系统和机器语言是无关的 2 在CPU执行指令的
  • tip消息定时弹窗功能 核心代码

    for var i 0 i lt 5 i var j 0 var arr 1 2 5 7 8 setTimeout function console log arr j i 3000
  • 深度学习与神经网络笔记

    在正式学习之前 首先清楚一下当前出现了很多次的概念是什么 这些概念之间的关系是什么 人工智能 AI 研究 开发用于模拟 延伸和扩展人的智能的理论 方法 技术和应用系统的一门新的技术科学 机器学习 实现人工智能的一种途径 以机器学习为手段解决
  • 《现代C++教程》笔记(2)

    2 语言可用性的强化 2 1 常量 nullptr 问题 C 不允许直接将 void 隐式转换到其他类型 但如果编译器尝试把 NULL 定义为 void 0 那么在下面这句代码中 char ch NULL 没有了 void 隐式转换的 C
  • 处理系统装机后BitLocker锁硬盘问题

    处理系统装机后BitLocker锁硬盘问题 今天重装公司里面的电脑发现装好后系统的D E盘被BitLocker锁住了 然后总结出了以下两种解决方法 可能不是非常详细但是还是希望可以对大家有所帮助 文章目录 处理系统装机后BitLocker锁
  • 总结使用Unity3D优化游戏运行性能的经验

    一 遇到麻烦时要调用 垃圾回收器 Garbage Collector 无用单元收集程序 以下简称GC 由于具有C C 游戏编程背景 我们并不习惯无用单元收集程序的特定行为 确保自动清理你不用的内存 这种做法在刚开始时很好 但很快你就公发现自
  • 2021-06-20

    TIM2 PWM部分初始化 PWM输出初始化 arr 自动重装值 psc 时钟预分频数 void TIM2 PWM Init u16 arr u16 psc GPIO InitTypeDef GPIO InitStructure TIM T
  • Symbol类型详解

    Symbol类型详解 symbol类型通过Symbol函数生成 用于表示独一无二的值 不使用new关键字 直接调用即可创建 例 const s Symbol str 即使使用相同的字符串来创建Symbol类型的值 这些值也是不同的 symb
  • 基于MATLAB GUI的裂缝检测(识别)系统(支持向量机)

    主要内容 本文对裂缝检测技术进行了深入研究 并结合裂缝图像的特征 提出了一种基于传统机器学习和图像处理技术的裂缝检测方法 实现裂缝基本参数的计算和显示 内容如下 1 裂缝图像采集 无人机 2 裂缝图像预处理 3 裂缝分割 提取 裂缝连接 4
  • 【Spring学习03】Spring简单入门实例

    本文博客地址 http blog csdn net soonfly article details 68498742 转载请注明出处 国际惯例 从一个简单的例子入门 轻松了解依赖注入 拿之前提到的场景 假设我们开发了一套管理系统 每收到一笔