【Spring 篇】Spring:轻松驾驭 Java 世界的利器
在 Java 开发领域,Spring 框架无疑是一颗璀璨的明星,它不仅提供了全面的企业级特性,还为开发者提供了简便而强大的开发方式。本文将深入探讨 Spring 框架的简介、配置和快速入门,带你轻松驾驭 Java 世界的利器。
Spring 简介
Spring 是一个综合性的框架,它的设计目标是降低企业级 Java 开发的复杂性。Spring 提供了全方位的解决方案,包括依赖注入、面向切面编程、事务管理、数据访问、消息传递等多个领域。Spring 框架的核心是 IoC(Inversion of Control,控制反转)和 AOP(Aspect-Oriented Programming,面向切面编程)。
IoC(控制反转)
控制反转是 Spring 框架的核心思想之一。在传统的开发中,对象的创建和管理由开发者负责,而在 Spring 中,这种控制被反转了。IoC 让 Spring 容器负责创建和管理对象,开发者只需要关注业务逻辑即可。
Spring 使用 Bean 容器来实现 IoC。Bean 容器是 Spring 框架的核心容器,负责创建、管理和装配 Bean。Bean 是 Spring 管理的对象,它们由 Spring 容器初始化、装配和管理。
AOP(面向切面编程)
面向切面编程是 Spring 框架的另一个核心思想。AOP 提供了一种方法,允许开发者在程序执行的特定切点上插入自定义的行为,而无需修改源代码。这样可以更好地实现横切关注点的复用和分离。
Spring 的 AOP 支持使用纯 Java 编程风格或 XML 配置来定义切面。通过 AOP,开发者可以将一些横切关注点(如事务管理、日志记录、性能监控等)从业务逻辑中分离出来,使得代码更加模块化和清晰。
Spring 配置
Spring 的配置方式主要有两种:XML 配置和注解配置。接下来我们将分别介绍这两种配置方式。
XML 配置
XML 配置是 Spring 最经典的配置方式之一,它使用 XML 文件来描述 Spring Bean 以及它们之间的依赖关系。
基本配置
下面是一个简单的 Spring XML 配置文件的例子:
<!-- applicationContext.xml --><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"><!-- 定义一个名为 "helloWorld" 的 Bean --><bean id="helloWorld" class="com.example.HelloWorld"><!-- 设置属性值 --><property name="message" value="Hello, Spring!" /></bean></beans>
在这个例子中:
<beans>
元素是配置文件的根元素,定义了 Spring 容器。<bean>
元素定义了一个 Spring Bean,其中id
属性指定了 Bean 的唯一标识符,class
属性指定了 Bean 的类型。<property>
元素用于设置 Bean 的属性值。
注入依赖
在 Spring 中,Bean 之间的依赖关系可以通过构造函数注入或者属性注入来实现。以下是一个使用构造函数注入的例子:
<!-- applicationContext.xml --><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"><!-- 定义一个名为 "textEditor" 的 Bean --><bean id="textEditor" class="com.example.TextEditor"><!-- 使用构造函数注入依赖 --><constructor-arg ref="spellChecker" /></bean><!-- 定义一个名为 "spellChecker" 的 Bean --><bean id="spellChecker" class="com.example.SpellChecker" /></beans>
在这个例子中,textEditor
Bean 依赖于 spellChecker
Bean,通过构造函数注入。constructor-arg
元素的 ref
属性指定了依赖的 Bean。
配置文件引入
为了更好地组织配置文件,可以使用 <import>
元素将多个配置文件组合在一起。例如:
<!-- mainApplicationContext.xml --><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"><!-- 引入其他配置文件 --><import resource="classpath:applicationContext.xml" /><import resource="classpath:databaseContext.xml" /></beans>
这样,可以将不同功能的配置拆分到不同的文件中,使得配置更加清晰和易于维护。
注解配置
除了 XML 配置外,Spring 还支持使用注解进行配置。注解配置更加简洁直观,可以减少大量的 XML 代码。
组件扫描
使用 @ComponentScan
注解开启组件扫描,Spring 将会自动扫描指定包及其子包下的类,将带有 @Component
或其他特定注解的类注册为 Bean。
// AppConfig.java@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
在这个例子中,@Configuration
注解表示这是一个配置类,@ComponentScan
注解指定了扫描的基础包。
声明 Bean
使用 @Bean
注解声明一个 Bean:
// AppConfig.java@Configuration
public class AppConfig {@Beanpublic HelloWorld helloWorld() {return new HelloWorld();}@Beanpublic TextEditor textEditor() {return new TextEditor(spellChecker());}@Beanpublic SpellChecker spellChecker() {return new SpellChecker();}
}
在这个例子中,helloWorld()
、textEditor()
、spellChecker()
方法分别声明了三个 Bean,并通过 @Bean
注解告诉 Spring 如何创建它们。
Spring 快速入门
现在我们将通过一个简单的例子来展示如何使用 Spring 进行快速开发。假设我们有一个图书管理系统,我们将创建一个 Book 类和一个 BookService 类。
Book 类
// Book.javapublic class Book {private String title;private String author;// 省略构造函数、getter 和 setter 方法
}
BookService 类
// BookService.java@Service
public class BookService {@Autowiredprivate BookRepository bookRepository;public List<Book> getAllBooks() {return bookRepository.findAll();}public void saveBook(Book book) {bookRepository.save(book);}
}
在这个例子中,BookService
类使用了 @Service
注解,表明它是一个服务类,由 Spring 管理。@Autowired
注解表示通过自动装配的方式注入 BookRepository
,省去了手动创建的步骤。
BookRepository 类
// BookRepository.java@Repository
public class BookRepository {private List<Book> books = new ArrayList<>();public List<Book> findAll() {return books;}public void save(Book book) {books.add(book);}
}
BookRepository
类使用了 @Repository
注解,表明它是一个仓库类,负责数据存储。这里简单地使用一个列表模拟数据库操作。
测试类
// Main.javapublic class Main {public static void main(String[] args) {// 初始化 Spring 容器AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 获取 BookService BeanBookService bookService = context.getBean(BookService.class);// 创建一本书Book book = new Book();book.setTitle("Spring in Action");book.setAuthor("Craig Walls");// 保存书bookService.saveBook(book);// 获取所有书籍并打印List<Book> allBooks = bookService.getAllBooks();for (Book b : allBooks) {System.out.println("Title: " + b.getTitle() + ", Author: " + b.getAuthor());}// 关闭 Spring 容器context.close();}
}
在这个例子中,我们使用 AnnotationConfigApplicationContext
类来初始化 Spring 容器,并通过 getBean()
方法获取 BookService
Bean。然后,我们创建一本书并保存,最后打印所有书籍信息。
结语
Spring 框架以其强大的功能和灵活的配置方式成为 Java 开发领域的佼佼者。本文简要介绍了 Spring 框架的核心思想,详细解释了 XML 和注解两种配置方式,并通过一个简单的例子演示了 Spring 的快速入门。希望通过本文的介绍,读者能够更好地理解和使用 Spring 框架,轻松驾驭 Java 世界的利器。
作者信息 作者 : 繁依Fanyi CSDN: https://techfanyi.blog.csdn.net 掘金:https://juejin.cn/user/4154386571867191 |
相关文章:

【Spring 篇】Spring:轻松驾驭 Java 世界的利器
在 Java 开发领域,Spring 框架无疑是一颗璀璨的明星,它不仅提供了全面的企业级特性,还为开发者提供了简便而强大的开发方式。本文将深入探讨 Spring 框架的简介、配置和快速入门,带你轻松驾驭 Java 世界的利器。 Spring 简介 Sp…...

八个LOGO素材网站推荐分享
即时设计资源广场 在UI界面设计中,为了找到合适的图标icon,你有没有尝试过翻遍整个网络,找到自己想要的,却无法下载或收费使用?最后,只收集图标icon材料需要半天时间。专业设计师使用的图标icon设计材料“…...
React格式化规范
React并没有特定的格式要求,它允许开发者根据自己的喜好和项目需求来选择代码的格式化风格。然而,在React社区中有一些常见的约定和最佳实践,以下是一些常用的格式化规范和建议: 缩进:使用2个或4个空格来进行缩进&…...
如何利用Conda管理多种虚拟环境与Jupyter Notebook内核切换
写在开头 在数据科学与机器学习领域,项目之间可能存在不同的依赖关系和版本要求。为了有效管理这些差异,使用虚拟环境成为一种标准实践。本文将介绍如何利用Conda这一强大的环境管理工具,结合Jupyter Notebook,使得在不同项目之间灵活切换变得轻而易举。 2. Conda简介 2…...
博客摘录「 什么是QPS、TPS、吞吐量?- 高并发名词概念」2024年1月5日
1.什么是高并发? 高并发(High Concurrency)。通常是指系统在短时间内的大量操作。 高并发相关的常见指标有:QPS、TPS、吞吐量、并发数等。 2.QPS(Query Per Second) QPS每秒查询率,是指系统…...

PTA——逆序的三位数
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。 输入格式: 每个测试是一个3位的正整数。 输出格式: 输出按位逆序…...

ChatGPT怎么帮我上班的
1.解放生产力 1)标准格式,完美输出。GPT对于公文等具有一定标准格式的文件,可以进行完美仿写,随随便便以假乱真那都是小菜一碟,这对于经常要开展规范成文的人来说,简直就是个福音,只要前期调教…...

WPF 漂亮长方体、正文体简单实现方法 Path实现长方体 正方体方案 WPF快速实现长方体、正方体的方法源代码
这段XAML代码在WPF中实现了一个类似长方体视觉效果的图形 声明式绘制:通过Path、PathGeometry和PathFigure等元素组合,能够以声明方式精确描述长方体每个面的位置和形状,无需编写复杂的绘图逻辑,清晰直观。 层次结构与ZIndex控制…...

Nginx(十三) 配置文件详解 - 反向代理(超详细)
本篇文章主要讲ngx_http_proxy_module和ngx_stream_proxy_module模块下各指令的使用方法。 1. 代理请求 proxy_pass 1.1 proxy_pass 代理请求 Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except 设置代理服务器的协议和地址以…...

谷歌浏览器启用实时字幕功能
在 Chrome 中使用“实时字幕”功能 - Google Chrome帮助 在 Chrome 中使用“实时字幕”功能 从计算机上的 Chrome 浏览器中,您可以使用“实时字幕”功能自动为视频、播客、游戏、直播、视频通话或其他音频媒体生成字幕。音频和字幕均在本地处理,并会保…...
php接口优化 使用curl_multi_init批量请求
PHP使用CURL同时抓取多个URL地址 抓取多个URL地址是Web开发中常见的需求,使用PHP的curl库可以简化这个过程。本文将详细介绍如何使用PHP的curl库同时请求多个URL地址,并提供具体的代码案例和注释。 curl库介绍 curl是一个常用的开源网络传输工具&…...
联邦拜占庭共识算法的工作流程
1 前言 联邦拜占庭共识算法(Federated Byzantine Agreement,简称FBA)是一种解决分布式系统中拜占庭问题的共识算法,是拜占庭容错共识算法里的其中一种,主要应用于区块链技术中。这种算法允许系统内部的各种节点自由进…...
国家开放大学形成性考核 统一考试 学习资料参考
试卷代号:11119 机械CAD/CAM 参考试题 一、单项选择题(从所给的四个选项中,找出你认为是正确的答案,将其编号填入括号内。每小题3分,共45分) 1.下述CAD/CAM过程的概念中,属于CAM范畴的是&am…...
2401C++,实现文件服务器和聊天室
文件服务器 使用yalantinglibs,几行代码开发静态文件服务器 最近的workshop上的一个任务,就是实现一个文件服务器,只要设置下载目录之后,就可下载目录里面的文件. 看看用yalantinglibs怎么实现一个静态文件服务器的吧. coro_http::coro_http_server server(1, 9001); server.…...
【ESP-NOW 入门(ESP32 with Arduino IDE)】
ESP-NOW 入门(ESP32 with Arduino IDE) 1. 前言2. Arduino集成开发环境3. ESP-NOW 简介3.1 ESP-NOW 支持以下功能:3.2 ESP-NOW 技术还存在以下局限性:4. ESP-NOW 单向通信4.1 一个 ESP32 开发板向另一个 ESP32 开发板发送数据4.2 一个“主”ESP32 向多个 ESP32“slave”发送…...

PHP序列化总结2--常见的魔术方法
魔术方法的概念 PHP的魔术方法是一种特殊的方法,用于覆盖PHP的默认操作。它们以双下划线(__)开头,后面跟着一些特定的字符串,如__construct()、__destruct()、__get()等。这些魔术方法在对象执行特定操作时被自动调用…...

Docker 入门 ------容器互通以及Dockerfile
1. 端口映射以及容器互联 Docker 除了通过网络访问,还提供了两种很方便的功能来满足服务访问的基本需求: 允许映射容器内应用的服务端口到本地宿主主机互联机制实现多个容器间通过容器名来快速访问 1.1 容器映射实现访问容器 1.1.1 从外部访问容器应…...

AI绘图模型不会写字的难题解决了
介绍 大家好,最近有个开源项目比较有意思,解决了图像中不支持带有中文的问题。 https://github.com/tyxsspa/AnyText。 为什么不能带有中文? 数据集局限 Stable Diffusion的训练数据集以英文数据为主,没有大量包含其他语言文本的…...

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决
vue-cli创建项目时由esLint校验导致报错或警告的问题及解决 一、万能办法 一、万能办法 //就是在报错的JS文件中第一行写上 /* eslint-disable */链接: https://www.yii666.com/blog/288808.html 其它的方法我遇见了再补充...

uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强制在线用户更新
实现登录即更新,或实时监听更新 本文介绍的是在App打开启动的时候调用更新,点击下方链接,查看使用WebSocket实现实时通知在线用户更新。 uniapp:全局消息是推送,实现app在线更新,WebSocket,ap…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...