Spring 的基本用法之另外一种装配方式

2023-11-02

一、目的

了解 Spring 环境配置。

掌握定义应用程序类。

掌握编辑配置文件创建 bean 实例实现依赖注入。

掌握编辑测试类创建 IoC 容器,通过容器获取 bean 实例。

二、内容

        创建一个Spring项目,完成主题为“订单信息通知”项目,每收到一笔订单后,系统给客户发送订单信息的通知。通知发送由两种方式:一种是手机短信;另一种是微信。

方法二:基于注解的 Bean 装配,项目运行结果如图所示:

 三、实现步骤

1、利用上一种方法创建的项目, 复制粘贴并重命名,按照后续步骤完成。

2、打开 src\main\java\Spring\Dao 目录中的 Order.Java 文件并添加注解。

3、打开 src\main\java\Spring\Dao\Impl 目录中的 NotifyDaoByCellPhoneImpl.Java 文件并添加注解。

4、打开 src\main\java\Spring\Dao\Impl 目录中的 NotifyDaoByWeixinImpl.Java 文件并添加注解。

5、打开 src\main\java\Spring\Service 目录中的 OrderNotify.Java 文件并添加注解。

6、打开 src/main/rescources 目录中的 applicationContext.xml 文件并添加相关命名内容。

7、打开 src\main\java\Spring\Test 目录中的 TestSpring.Java 文件并进行修改。

8、运行该项目查看运行结果。

四、遇到的问题:在进行partB部分时,使用注解@Value报红

出现该问题的原因:导包错误(原因是lombok里面也有Value,两者名字一样,eclipse没有识别到,导致错误。)

解决办法:正确手动导包

 五、部分关键代码:

Order.java

package Spring.Dao;

import org.springframework.stereotype.Repository;

import lombok.*;

import org.springframework.beans.factory.annotation.Value;

@Setter

@NoArgsConstructor

@AllArgsConstructor

@Repository

public class Order {

@Value("20210504557")

String id;

@Value("赵尚凌")

String clientName;

@Value("97.5")

float money;

public String toString() {

return "客户: "+clientName+",完成订单:"+id+"付款,共人民币:"+money+"元";

}

}

NotifyDaoByCellPhoneImpl.java

package Spring.Dao.Impl;

import org.springframework.stereotype.Repository;

import Spring.Dao.NotifyDao;

@Repository("NotifyByCellPhone")

public class NotifyDaoByCellPhoneImpl implements NotifyDao {

public void sendMessage(String message) {

System.out.println("发送手机短信: "+message);

}

}

NotifyDaoByWeixinImpl.java

package Spring.Dao.Impl;

import org.springframework.stereotype.Repository;

import Spring.Dao.NotifyDao;

@Repository("NotifyByWeixin")

public class NotifyDaoByWeixinImpl implements NotifyDao {

public void sendMessage( String message) {

System.out.println("发送微信短信: "+message) ;

}

}

OrderNotify.java

package Spring.Service;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.stereotype.Service;

import Spring.Dao.NotifyDao;

import Spring.Dao.Order;

import lombok.*;

@Setter

@NoArgsConstructor

@AllArgsConstructor

@Service("OrderNotify")

public class OrderNotify {

@Autowired

@Qualifier("NotifyByWeixin")

private NotifyDao notify;

@Autowired

private Order order;

public void PaySuccess(){

notify.sendMessage(order.toString());

}

}

applicationContext.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

  https://www.springframework.org/schema/beans/spring-beans.xsd">

 

<bean id="order1" class="Spring.Dao.Order"> 

  <!-- collaborators and configuration for this bean go here -->

<property name="id" value="赵尚凌" />

   <property name="clientName" value="20210504557" />

   <property name="money" value="97.5" />

  </bean>

<bean id="order2" class="Spring.Dao.Order">

   <constructor-arg index="0" value="刘瑞华" />

  <constructor-arg index="1" value="20210504558" />

   <constructor-arg index="2" value="157.5" />

</bean>

<!--3.声明"Spring.Dao.Impl.NotifyDaoByCellPhoneImpl”类的bean(id="cellPhone") -->

<bean id="cellPhone" class="Spring.Dao.Impl.NotifyDaoByCellPhoneImpl">

</bean>

<!--4.声明"Spring.Dao.Impl.NotifyDaoByweixinImpl”类的bean(id="weixin") -->

<bean id="weixin" class="Spring.Dao.Impl.NotifyDaoByWeixinImpl">

</bean>

<!--5.仿照上面设值注入格式使用设值注入声明Spring.Service.OrderNotify”类的

bean(id="orderNotify1") ,分别使用前面声明的bean: order1和cellPhone为其注入值-->

 <bean id="orderNotify1" class="Spring.Service.OrderNotify">

        <property name="order" ref="order1" />

        <property name="notify" ref="cellPhone" />

    </bean>

<!--6.仿照上面构造注入格式使用构造注入再声明"Spring.Service.0rderNotify”类的

bean(id="orderNotify2") ,分别使用前面声明的bean: order2和weixin为其注入值-->

<bean id="orderNotify2" class="Spring.Service.OrderNotify">

        <constructor-arg ref="order2" />

        <constructor-arg ref="weixin" />

    </bean>

</beans>

六、心得

        通过本次学习,巩固了创建Maven Java Web 项目,使用Maven 项目构建工具更加熟练,了解Spring 环境配置Spring贯穿了表现层、业务层、持久层,为企业的应用开发提供了一个轻量级的解决方案,包括了基于依赖注入的核心机制,基于AOP的声明式事务管理,与多种持久层技术的整合,以及优秀的Web MVC框架等等,Spring采用反射的方式,在运行时动态的生成相应的Bean。

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

Spring 的基本用法之另外一种装配方式 的相关文章

  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 在 Wildfly 中与 war 部署共享 util jar 文件

    假设我有一个名为 util jar 的 jar 文件 该 jar 文件主要包含 JPA 实体和一些 util 类 无 EJB 如何使这个 jar 可用于 Wildfly 中部署的所有 war 无需将 jar 放置在 war 的 WEB IN
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • @Autowire注释的问题(空)

    我在验证器类中自动连接的两个服务有问题 这些服务工作正常 因为在我的控制器中是自动连接的 我有一个 applicationContext xml 文件和 MyApp servlet xml 文件 我的基础包是 es unican meteo
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 读取电子邮件的文本文件转换为 Javamail MimeMessage

    我有一个电子邮件原始来源的文本文件 直接从 gmail 复制 如果您单击 查看原始文件 您就会看到它 我想读入该文件并将其转换为 MimeMessage 如果您好奇为什么 我设置了 JavaMaildir 并且需要用电子邮件填充它的收件箱以
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • 如何在 Java 中创建接受多个值的单个注释

    我有一个名为 Retention RetentionPolicy SOURCE Target ElementType METHOD public interface JIRA The Key Bug number JIRA referenc
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • 2022春招前端最新面试题分享(诺亚财富)

    诺亚财富面经 公司及岗位信息 公司 诺亚财富 岗位 前端开发工程师 地点 上海 薪资 10k 15k 14薪 面试结果 三轮技术面全部通过 约了HR面了 一面 2022 04 21 自我介绍 为什么不在实习公司转正 JS常见数据类型 基本类
  • windows Ubuntu loongnix 网络通信

    当我们进行Linux应用开发时 我们面临的首要问题便是如何让windows ubuntu和开发板三者完成通信 以便于代码文件的传输 1 windows和ubuntu 的通信 首先我们在建立ubuntu虚拟机时将其网络适配器模式配置为NAT
  • To create POPUP menu

    To create popupmenu Create new menu as follows Select popup opion Click on define transfer Assign any menu component pag
  • 飞猪单品详情采集

    api detail f ret SUCCESS 调用成功 v 1 0 data sold data sold 月销 5647 笔 soldCount 5647 tag sold pageContainer children detailC
  • python(chapter02)

    字符串 字符串 pystr python iscool is cool print pystr 0 使用切片法来进行字符串的切割 索引是2 到 5 的字符串 print pystr 2 5 索引是0到2的 print iscool 2 索引
  • ChatGLM-6B的安装和使用最全面细节讲解

    ChatGLM 6B是一个基于General Language Model GLM 架构的开源对话语言模型 支持中英双语 该模型使用了和ChatGPT类似的技术进行优化 经过1T标识符的中英双语训练 同时辅以监督微调 反馈自助和人类反馈强化
  • 【Solidity】Storage和memory关键字的区别和用法

    在 Solidity 中 有两个地方可以存储变量 storage以及memory Storage 变量是指永久存储在区块链中的变量 Memory 变量则是临时的 当外部函数对某合约调用完成时 内存型变量即被移除 状态变量 在函数之外声明的变
  • Work Tips

    目录 IAR环境下 使用Live Watch实时监控变量值 IAR替换mcu库 Linux中删除swp文件 使用J Link通过SWD接口直接下载 hex文件和 bin文件到MCU 下载J Flash软件 linux设置时间命令 Jlink
  • chatgpt综述和报告

    ChatGPT究竟强在哪 复旦大学邱锡鹏教授 大型语言模型的能力分析与应用 哔哩哔哩 bilibili2022年底 美国OpenA1公司发布了ChatGPT 一个可以与人类对话交互的千亿规模参数的大型语言模型 它可以根据用户输入的指令完成各
  • Cocos Creator 华容道

    环境 cocos creator 2 0 10 Mac环境 TypeScript 文末附源码链接 本文提供了游戏玩法的逻辑 支持关卡配置 可以自由配置关卡 先看一下效果 首先 我们看一下我们要处理的问题 1 区域划分 2 角色摆放 即 关卡
  • openWRT添加模块(四)

    http blog chinaunix net uid 10429687 id 3374873 html OpenWrt是一个比较完善的嵌入式Linux开发平台 在无线路由器应用上已有100多个软件包 人们可以在其基础上增加软件包 以扩大其
  • PID怎么应用到实际控制系统

    早就想写篇PID应用的文章 可是一直以来受限于自己的知识水平和能力 未能如愿 整个暑假在做一个激光电源的控制程序 核心思想又是PID控制 看来在整个控制领域 PID 的市场可是无处不在啊 关于PID的理论分析这里不在赘述 可以在一般的资料上
  • 判断这个数能被4整除,但是不能被100整除

    需求 用户输入一个 判断这个数能被4整除 但是不能被100整除 分析 1 用户输入 2 控制台 是否能被4整除并且100整除 let num prompt 请输入一个数 num num 0 防止用户输入空字符若是空字符就为0 let re
  • kdj超卖_kdj超卖是什么意思?kdj超买超卖区别是什么

    kdj超卖是什么意思 kdj超买超卖区别是什么 对于大多数股民来说 指标应用是股市投资必不可少的操作系统 指标的主要作用就是用来作参考 辅助自己进行股票投资 今天 在这里我们所要谈论的是kdj指标 kdj超卖是什么意思 如何判断kdj超买超
  • angular4学习指南,环境搭建,基础概念解析(一)

    一 Angular是什么 Angular是由google开发维护的一个开发跨平台应用的框架 同时适应PC端和移动端 两个大版本 1 5 和4 0 4 0完全重写 1 5之前的叫angularJS 4 0叫angular 二 Angular开
  • Netty02-入门

    二 Netty 入门 1 概述 1 1 Netty 是什么 Netty is an asynchronous event driven network application framework for rapid development
  • dlna 斐讯r1怎么用_斐讯R1智能(蓝牙)音箱固件升级教程

    斐讯R1智能 蓝牙 音箱固件升级教程 2019 07 05 17 46 00 55点赞 459收藏 112评论 儿子现在突然爱上听歌写作业 难得是听歌品味居然跟我8分像 书桌空间有限 看来一圈蓝牙音箱 发现斐讯遗产R1 哈曼认证单元 但据说
  • Python 频繁请求问题: [Errno 104] Connection reset by peer

    记遇到的一个问题 Errno 104 Connection reset by peer 今天工作上有个需求 数据库有个表有将近3万条url记录 每条记录都是一个图片 我需要请求他们拿到每个图片存到本地 一开始我是这么写的 伪代码 impor
  • Java学习笔记16——抽象类

    抽象类 抽象类 什么是抽象类 抽象的关键字 抽象类的特点 抽象类的成员特点 抽象类 什么是抽象类 在Java中 一个没有方法体的方法 应该被定义为抽象方法 而类中如果有抽象方法 该类被定义为抽象类 抽象的关键字 abstract 抽象类的特
  • Spring 的基本用法之另外一种装配方式

    一 目的 了解 Spring 环境配置 掌握定义应用程序类 掌握编辑配置文件创建 bean 实例实现依赖注入 掌握编辑测试类创建 IoC 容器 通过容器获取 bean 实例 二 内容 创建一个Spring项目 完成主题为 订单信息通知 项目