当前位置: 首页 > news >正文

后端:Spring-1

在这里插入图片描述

文章目录

    • 1. 了解 spring(Spring Framework)
    • 2. 基于maven搭建Spring框架
      • 2.1 纯xml配置方式来实现Spring
      • 2.2 注解方式来实现Spring
      • 3. Java Config类来实现Spring
    • 2.4 总结

1. 了解 spring(Spring Framework)

传统方式构建spring(指的是Spring Framework)项目,导入依赖繁琐(需要自行去maven官网去下载依赖或者copy对应的依赖,并且各个依赖之间可能还存在版本冲突的问题)、项目配置繁琐(需要添加一些配置文件,且配置文件中需要写一些重复的代码,总之很繁琐)。
而Spring Boot简化了上述操作,比如之前的Spring项目中整合mybatis时,需要在配置文件中定义对应的bean才行,而使用Spring Boot之后,(在引入对应依赖的前提下)只需要在application.yml中添加一些数据库连接的对应信息及其他一些配置,然后就可以实现同样的效果了。
上述只是对于两者做的一个简单比较。请添加图片描述

说到Spring,应该联想到IOC(控制反转)、DI(依赖注入)。所谓控制反转(对象创建权力)一个类需要用到另外一个类的对象,通常做法是在这个类下new另外一个类对象,但是这样会让这两个对象产生一个强关联,它们之间就建立了强耦合的关系,而代码之间的耦合度越高,对越后期维护越不利。而使用了Spring之后,可以把类放到容器中进行管理,需要用到某个类时只需要把这个类进行依赖注入即可,从而降低耦合度。

2. 基于maven搭建Spring框架

使用idea创建一个maven项目,这只是一个例子,项目结构如下:
在这里插入图片描述
导入junit依赖,如下:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>

各个类的参考代码如下:

package com.lize.dao;public class UserDao {public void printUserD(){System.out.println("UserDao");}
}
package com.lize.service;import com.lize.dao.UserDao;public class UserService {private UserDao ud = new UserDao();public void printUserS(){ud.printUserD();}
}

测试代码如下:

import com.lize.service.UserService;
import org.junit.Test;public class Test01 {@Testpublic void test(){UserService userService = new UserService();userService.printUserS();}
}

2.1 纯xml配置方式来实现Spring

下面使用Spring方式来降低上述代码耦合度。首先,添加spring的对于依赖。

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.9.RELEASE</version>
</dependency>

在resources文件夹下面创建一个xml文件,在xml文件添加对应的bean标签即可。

<?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-4.0.xsd"><bean class="com.lize.dao.UserDao" name="userDao"/><bean class="com.lize.service.UserService" name="userService"><property name="ud" ref="userDao"/><!--   ud为对应的service文件的变量名     --></bean></beans>

当然对应service文件也需要修改,添加set方法。

package com.lize.service;import com.lize.dao.UserDao;public class UserService {private UserDao ud;public void setUd(UserDao ud) {this.ud = ud;}public void printUserS(){ud.printUserD();}
}

运行代码如下,从abc.xml文件获取对应容器对象,然后从这个对象中获取对应的bean。

import com.lize.service.UserService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test01 {@Testpublic void test(){ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("abc.xml");UserService us = (UserService) ctx.getBean("userService");us.printUserS();}
}

2.2 注解方式来实现Spring

此时abc.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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.lize"/><!--   dao、service包在这个目录下,spring容器会自动扫描,当然需要在对应类上添加注解     -->
</beans>

此时在dao、service对应的类上添加注解“@Component”,如下:

package com.lize.service;import com.lize.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class UserService {@Autowiredprivate UserDao ud;public void printUserS(){ud.printUserD();}
}

使用注解“Autowired"自动导入,不需要再写set方法,运行代码不需要修改。

3. Java Config类来实现Spring

在2的基础上,abc.xml可以不需要了,此时只需要定义一个配置类,如下:

package com.lize.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
// 表明这是一个配置类
@ComponentScan("com.lize")
// 需要扫描的包
public class SpringConfig {
}

运行方式如下:

import com.lize.config.SpringConfig;
import com.lize.service.UserService;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Test01 {@Testpublic void test2(){AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);UserService us = (UserService) context.getBean("userService");us.printUserS();}
}

2.4 总结

第一种方式基于xml文件实现控制反转,需要在xml文件定义大量的bean;第二种方式只需要在xml文件添加扫描标签,并且需要在对应的类上添加注解;第三种方式需要定义配置类,在配置类上添加对应注解,通过注解的方式去扫描对应包下的对应类。Spring Boot基于第三种方式再进一步封装实现的。
在这里插入图片描述

相关文章:

后端:Spring-1

文章目录 1. 了解 spring(Spring Framework)2. 基于maven搭建Spring框架2.1 纯xml配置方式来实现Spring2.2 注解方式来实现Spring3. Java Config类来实现Spring 2.4 总结 1. 了解 spring(Spring Framework) 传统方式构建spring(指的是Spring Framework)项目&#xff0c;导入依…...

OTX系统架构分析

OTX&#xff08;Open Test Sequence Exchange&#xff09;系统架构是一种专门为汽车行业设计的测试序列交换格式&#xff0c;它基于ISO 13209标准&#xff0c;旨在提供一种独立于测试人员的可执行测试序列描述格式。 一、OTX系统架构概述 OTX架构是一种标准化的平台和格式&am…...

ASO如何低预算进行优化

当一个产品打造出来之后&#xff0c;正式上线是从零到一的过程&#xff0c;那从一到一百的路径就是获取流量到商业变现这个环节产生的&#xff0c;之前的文章也说过&#xff0c;一个产品只有有了一定的曝光才能获得相应的搜索流量或下载流量 ASO的江湖地位&#xff1a;有数据显…...

非线性数据结构之数

一、基本概念 1. 二叉树的节点与深度 节点&#xff1a;二叉树的基本组成单位&#xff0c;每个节点包含一个数据值、一个左子节点和一个右子节点。树的深度&#xff08;Height&#xff09;&#xff1a;指树的根节点到叶子节点的最长路径所包含的边数。 2. 二叉树的类型 叶节…...

个人开发三步走

一、开发准备 1&#xff0e;需求分析&#xff1a;需求是开发的起点。第一步要做的就是明确需求&#xff0c;具体来说就是分析目标用户、他们的需求(功能需求、性能需求、安全需求)和痛点。 2&#xff0e;技术选型&#xff1a;综合开发需求、个人能力&#xff08;能熟练使用&a…...

qt QAction详解

1、概述 QAction是Qt框架中的一个抽象类&#xff0c;用于表示用户界面中的一个动作&#xff08;action&#xff09;。这些动作可以绑定到菜单项、工具栏按钮或快捷键上&#xff0c;提供了一种灵活的方式来处理用户交互。QAction不仅包含了动作的名称、图标、提示信息等属性&am…...

建立maven项目常见问题解决办法

从git拉的项目爆红 https://blog.csdn.net/wsdbld_/article/details/115380325 idea点击具体的类没有反应 https://www.likecs.com/show-204943934.html maven Could not find artifact com.** 无法下载原因分析 https://www.cnblogs.com/thinkingandworkinghard/p/100824…...

Windows 10 安装使用Docker踩过的坑和解决-31/10/2024

目录 环境版本 一、Docker Desktop双击启动没反应&#xff0c;open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、Docker Engine stopped/启动…...

微服务之间的调用关系

从数据的流向来区分有 1.直接调用&#xff08;推&#xff09;A直接B的接口直接将数据推送给B; 2.间接调用&#xff08;拉&#xff09;A先调B&#xff0c;B根据A给信息再去调A拉取数据&#xff1b; 感觉间接调用有点多此一举&#xff01;&#xff01;&#xff01; 直接调用的…...

Chinese Spelling Correction as Rephrasing Language Model(AAAI2024)

Chinese Spelling Correction as Rephrasing Language Model(AAAI2024) 一&#xff0e;概述 目前最先进的方法将CSC(Chinese Spelling Correction)作为序列标注任务&#xff0c;并在句子对上微调基于bert的方法。然而&#xff0c;我们注意到在将一个字符标注为另一个字符的过…...

DirectShow过滤器开发-写MP3音频文件过滤器(再写 写MP3)

下载本过滤器DLL 本过滤器将MP3音频流写到MP3音频文件。 过滤器信息 过滤器名称&#xff1a;写MP3_2 过滤器GUID&#xff1a;{AE46BC15-71E5-471C-8540-3B73094111EC} DLL注册函数名&#xff1a;DllRegisterServer 删除注册函数名&#xff1a;DllUnregisterServer 过滤器有1个…...

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《基于对等架构的虚拟电厂-配电网双层电碳协同调度模型》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…...

大数据-204 数据挖掘 机器学习理论 - 混淆矩阵 sklearn 决策树算法评价

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

Fsm1

为了处理有时间上先后的事件&#xff0c;在FPGA中采用状态机的形式完成事件处理。 Mealy 状态机&#xff1a;输出不仅取决于当前状态&#xff0c;还取决于输入状态。 Moore 状态机&#xff1a;组合逻辑的输出只取决于当前状态&#xff0c;而与输入状态无关。 二段式状态机&…...

C. Gorilla and Permutation

time limit per test 2 seconds memory limit per test 256 megabytes Gorilla and Noobish_Monk found three numbers nn, mm, and kk (m<km<k). They decided to construct a permutation†† of length nn. For the permutation, Noobish_Monk came up with the …...

从0开始学python-day17-数据结构2

2.3 队列 队列(Queue)&#xff0c;它是一种运算受限的线性表,先进先出(FIFO First In First Out) 队列是一种受限的线性结构 受限之处在于它只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;进行插入操作 P…...

(蓝桥杯C/C++)—— 编程基础

文章目录 一、C基础格式 1.打印hello, world 2.基本数据类型 二、string 1.string简介 2.string的声明和初始化 3.string其他基本操作 (1)获取字符串长度 (2) 拼接字符串( 或 append) (3&#xff09;字符串查找&#xff08;find&#xff09; (4)字符串替换 (5)提取子字符串…...

企业物流管理数据仓库建设的全面指南

文章目录 一、物流管理目标二、总体要求三、数据分层和数据构成&#xff08;1&#xff09;数据分层&#xff08;2&#xff09;数据构成 四、数据存储五、数据建模和数据模型&#xff08;1&#xff09;数据建模&#xff08;2&#xff09;数据模型 六、总结 在企业物流管理中&…...

数据采集-Kepware 安装证书异常处理

这里写目录标题 一、 问题描述二、原因分析三、处理方案3.1 1.执行根证书的更新3.2 安装KepServerEx 资源 一、 问题描述 在进行KepServerEx进行安装的情况下&#xff0c;出现了如下的报错&#xff1a; The installer was unable to find required root certificates ,please …...

ubuntu禁止自动更新设置

背景概述 从CentOS变更到uBuntu或多或少会遇到一些坑&#xff0c;今天分享一个。 在Ubuntu系统中&#xff0c;自动更新是一个既方便又引发争议的功能。它可以帮助用户保持系统的最新状态&#xff0c;但有时也会因为自动更新而导致系统不稳定或不兼容。 Ubuntu系统的自动更新主…...

WCH RISC-V MCU开发:在MounRiver Studio里一键切换GCC8和GCC12工具链(附内存占用对比)

WCH RISC-V MCU开发实战&#xff1a;MounRiver Studio工具链切换与性能优化指南 对于嵌入式开发者而言&#xff0c;选择合适的编译器工具链往往能在资源受限的MCU环境中带来显著性能提升。WCH基于RISC-V架构的微控制器凭借其高性价比和丰富外设资源&#xff0c;正逐渐成为物联网…...

体验Taotoken低延迟与高稳定性的模型API调用服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 体验Taotoken低延迟与高稳定性的模型API调用服务 对于依赖大模型API进行应用开发的团队而言&#xff0c;服务的稳定性和响应速度是…...

GJB 128B-2021标准变更深度解析:VDMOS产品试验方法的影响与应对

1. GJB 128B-2021标准变更的核心要点 对于从事VDMOS产品研发和质量控制的工程师来说&#xff0c;2022年3月正式实施的GJB 128B-2021标准带来了不少值得关注的调整。相比旧版标准&#xff0c;这次修订在试验条件、热平衡判定、静电防护等多个关键环节都做出了具体规定。我仔细研…...

Perplexity远程岗申请失败率高达73%?揭秘HR系统自动过滤的4个隐形关键词及规避话术库

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Perplexity招聘信息搜索 Perplexity AI 作为一家快速发展的生成式人工智能公司&#xff0c;其招聘动态常通过官方渠道及技术社区实时更新。掌握高效、精准的招聘信息检索方法&#xff0c;是开发者与研究人员了…...

告别BurpSuite自带Intruder的龟速:用Turbo Intruder插件30倍速爆破验证码(附Python脚本)

突破传统限制&#xff1a;Turbo Intruder在验证码爆破中的高效实践 在渗透测试和安全评估工作中&#xff0c;验证码爆破是一个常见但极具挑战性的任务。传统的BurpSuite Intruder模块虽然功能强大&#xff0c;但在处理高并发请求时往往显得力不从心&#xff0c;速度成为制约效率…...

探索中医数字化:基于深度学习的舌苔检测项目推荐

探索中医数字化&#xff1a;基于深度学习的舌苔检测项目推荐 【下载地址】基于深度学习的舌苔检测毕设留档 本项目是针对中医领域中舌象分析的一项研究&#xff0c;通过应用深度学习技术来实现自动的舌苔检测。随着人工智能在医疗健康领域的深入发展&#xff0c;利用计算机视觉…...

手把手教你为100ASK T113-S3核心板点亮SPI屏:设备树配置、内核编译到fb-test测试

手把手教你为100ASK T113-S3核心板点亮SPI屏&#xff1a;设备树配置、内核编译到fb-test测试 在嵌入式Linux开发中&#xff0c;驱动一块SPI接口的LCD屏幕是常见的硬件交互项目。本文将基于全志T113-S3平台和100ASK核心板&#xff0c;详细讲解如何从零开始驱动ILI9341 SPI屏幕。…...

Perplexity真实岗位薪资曝光,17城对比+职级换算公式,HR不会告诉你的薪酬锚点

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity真实岗位薪资曝光&#xff0c;17城对比职级换算公式&#xff0c;HR不会告诉你的薪酬锚点 一线数据来源与采样逻辑 本章薪资数据源自2024年Q2匿名技术社区&#xff08;如Levels.fyi、Blind、脉脉脱…...

Docker 网络模式详解:bridge、host、overlay 和 macvlan

Docker 网络模式详解&#xff1a;bridge、host、overlay 和 macvlan Docker 提供了多种网络模式&#xff0c;让容器既能灵活通信&#xff0c;又能实现安全隔离。无论是单机多容器应用&#xff0c;还是跨主机的 Swarm 集群&#xff0c;亦或需要直接接入物理网络的 IoT 设备&…...

让老游戏在现代Windows上重获新生:DDrawCompat使用完全指南

让老游戏在现代Windows上重获新生&#xff1a;DDrawCompat使用完全指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/D…...