Spring系统学习(一)——初识Spring框架

news2024/9/21 14:25:56

1. Spring 框架概述

1.1 什么是 Spring?

Spring 是一个流行的基于 Java 的开源框架,旨在简化企业级应用程序的开发。最初,它是为了简化 Java 企业版(Java EE)的复杂性而设计的,经过不断发展,Spring 已经成为支持各类应用开发的全栈生态系统,包括 web 开发、数据访问、消息服务等。它的核心理念是控制反转(IoC)和依赖注入(DI),这有助于提高代码的模块化、可测试性和可维护性。

1.2 Spring 框架的优点
  • 松耦合架构:通过控制反转和依赖注入,Spring 允许开发者轻松地管理和组织组件,使得模块之间的依赖关系变得松散,提高了代码的可维护性。
  • 模块化:Spring 的各个功能模块是独立的,你可以只选用需要的部分,而不用加载整个框架。
  • 强大的社区支持:Spring 社区活跃,文档丰富,问题也能很快得到解答。
  • 简化了企业级 Java 开发:Spring 抽象了许多复杂的 Java EE 功能,比如事务管理、数据持久化等,使开发者可以专注于业务逻辑而不是基础设施代码。
1.3 Spring 的体系结构

Spring 框架是由多个模块构成的,以下是主要模块的介绍:

  • Spring Core Container(核心容器):负责 IoC 和 DI,核心包是 spring-corespring-beans,这是 Spring 的基础模块。
  • Spring AOP(面向切面编程):支持面向切面的编程,允许在不修改代码的情况下为现有功能添加新行为,比如日志、事务管理等。
  • Spring Data Access(数据访问):为持久层提供了对 JDBC、ORM(如 Hibernate)、NoSQL 数据库的支持。
  • Spring Web(Web 开发):用于开发 Web 应用程序,Spring MVC 是其中的核心部分,简化了基于 Servlet 的 Web 应用开发。
  • Spring Security:提供强大的安全管理功能,如身份验证和授权控制。
  • Spring Boot:用于快速创建 Spring 应用,提供了开箱即用的配置和部署。
1.4 Spring 5 的新特性
  • 响应式编程:Spring 5 引入了对响应式编程模型的支持,如 Spring WebFlux,它可以更好地处理非阻塞、异步的请求,尤其适合高并发应用场景。
  • Java 8+ 特性支持:Spring 5 开始要求 Java 8 作为最低版本,并充分利用了 Java 8 的新特性,比如 Lambda 表达式、Stream API 等。
  • Kotlin 支持:Spring 5 提供了对 Kotlin 编程语言的更好支持,让开发者可以使用 Kotlin 编写 Spring 应用。
  • 更加轻量级:Spring 5 通过优化和减少依赖,使得应用变得更加轻量化,启动和运行效率更高。
1.5 Spring 项目的结构与目录

当我们创建一个 Spring 项目时,通常会看到以下目录结构:

  • src/main/java:Java 源代码目录,存放业务逻辑相关的代码。
  • src/main/resources:资源文件目录,存放配置文件、静态资源等,如 application.propertiesapplication.yml
  • src/test/java:单元测试代码目录,存放测试类。
  • src/test/resources:测试资源文件目录。
  • pom.xml(Maven 项目)或 build.gradle(Gradle 项目):项目构建管理工具的配置文件,用于管理依赖项和构建过程。

2. Spring 入门程序

2.1 创建一个简单的 Spring 应用

可以使用 Spring Boot 来创建一个简单的 Spring 应用,下面是步骤:

  1. 使用 Spring Initializr 创建项目
    你可以访问 Spring Initializr 来快速生成 Spring 项目。选择合适的依赖,比如 Spring Web 和 Spring Boot DevTools,然后下载项目。

  2. 编写 Hello World 应用
    src/main/java 中创建一个主类,并加上 Spring Boot 的入口注解:

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    
    @RestController
    class HelloController {
        @GetMapping("/hello")
        public String hello() {
            return "Hello, Spring!";
        }
    }
    
  3. 运行项目
    在项目根目录下运行 mvn spring-boot:run 或直接运行 DemoApplication 类,访问 http://localhost:8080/hello,你将看到页面返回 “Hello, Spring!”。

3. 控制反转(IoC)与依赖注入(DI)

3.1 控制反转(IoC)的概念

控制反转(Inversion of Control, IoC)是 Spring 框架的核心思想之一。简单来说,IoC 是指对象的创建和依赖关系的管理不再由开发者手动处理,而是由 Spring 容器自动管理。开发者只需声明依赖,容器会负责依赖的注入。

3.2 依赖注入(DI)的概念

依赖注入(Dependency Injection, DI)是 IoC 的具体实现方式。它允许开发者在需要的地方声明依赖,而不用手动去创建它们。Spring 容器会自动根据配置,将合适的对象注入到依赖的位置。

3.3 依赖注入的类型

Spring 支持以下几种方式的依赖注入:

  1. 构造器注入:通过构造函数注入依赖。开发者可以通过构造函数定义依赖项。
    @Service
    public class MyService {
        private final MyRepository repository;
    
        @Autowired
        public MyService(MyRepository repository) {
            this.repository = repository;
        }
    }
    
  2. Setter 注入:通过 Setter 方法注入依赖,Spring 容器会自动调用 Setter 方法。
    @Service
    public class MyService {
        private MyRepository repository;
    
        @Autowired
        public void setRepository(MyRepository repository) {
            this.repository = repository;
        }
    }
    
  3. 字段注入:直接在类的字段上使用 @Autowired 注解。尽量避免使用这种方式,因为它不利于单元测试和可维护性。
    @Service
    public class MyService {
        @Autowired
        private MyRepository repository;
    }
    
3.4 依赖注入的应用

依赖注入广泛应用于实际开发中,尤其是在控制器、服务、数据访问层等需要频繁交互的模块之间。通过依赖注入,模块之间可以解耦,同时便于测试。

例如,在构建 Web 应用时,控制器可能依赖于服务类,而服务类又依赖于数据访问层,Spring 的 DI 能够自动管理这些依赖,简化开发过程。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

焦化行业的变革力量:智能巡检机器人

根据相关数据,2024年1-2月份,焦炭产量为8039.5万吨,同比增长2.1%,这表明,我国焦化行业仍是全球最大的焦炭生产国和消费国,其市场规模占据了重要地位。焦化企业主要集中在山西省,其合计焦炭产能约…

基础漏洞——SSRF

目录 一.原理 二.引起ssrf的函数 三.这些函数具体作用 (1)File_get_content() (2)Fsockopen() (3)Curl_exec() 四.常见的业务场景(可能出现的漏洞的地方,漏洞挖掘&#xff09…

FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频

Android早期的MediaPlayer控件对于网络视频的兼容性很差,所以后来单独推出了Exoplayer库增强支持网络视频,在《Android Studio开发实战:从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详细…

stack和queue(一)

接下来讲解一些stack栈和queue的简单使用 stack的概念 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行 元素的插入与提取操作。 特性是先进先出 后进后出 构造一个栈堆 int main() {deque<int>…

树莓派配置Qt+OpenCV

本次教程使用的树莓派镜像&#xff1a;树莓派镜像带图像界面下载 Qt的安装&#xff1a; 在命令行依次输入以下命令安装Qt&#xff1a; sudo apt-get updatesudo apt-get upgrade sudo apt-get install qtbase5-dev qtchooser sudo apt-get install qt5-qmake qtbase5-dev-t…

threejs加载高度图渲染点云,不支持tiff

问题点 使用的point来渲染高度图点云&#xff0c;大数据图片无效渲染点多&#xff08;可以通过八叉树过滤掉无效点增加效率&#xff0c;这个太复杂&#xff09;&#xff0c;但是胜在简单能用 效果图 code 代码可运行&#xff0c;无需npm <!DOCTYPE html> <html la…

MySQL聚合统计和内置函数

【数据库】MySQL聚合统计 王笃笃-CSDN博客https://blog.csdn.net/wangduduniubi?typeblog显示平均工资低于2000的部门和它的平均工资 mysql> select deptno,avg(sal) deptavg from emp group by deptno; --------------------- | deptno | deptavg | --------------…

0x08 MotionEye 视频监控组件 list 信息泄漏洞 CVE-2022-25568

参考&#xff1a; MotionEye 视频监控组件 list 信息泄漏洞 CVE-2022-25568 | PeiQi文库 (wgpsec.org) 一、漏洞描述&#xff1a; motionEye是用Python写的motion的Web前端&#xff0c;它可以监视视频信号并检测运动。它可以与多种类型的摄像机配合使用,也可以与电影文件一起…

PMP--二模--解题--41-50

文章目录 11.风险管理--风险代表对将来问题的预判&#xff0c;问题代表对过去问题事件的跟踪&#xff1b;两者联系&#xff1a;风险发生后会变成问题&#xff0c;而问题可能导致新的风险。41、 [单选] 在项目会议期间&#xff0c;一个团队发现三个月前关闭的问题仍然处于活跃状…

解决 Prettier ESLint 错误

解决 Prettier ESLint 错误 在 Vue.js 项目中使用 ESLint 和 Prettier 时&#xff0c;你可能会遇到类似以下的错误&#xff1a; frontend\src\views\dashboard\MobileConfigPanel.vue1:25 error Delete ␍ …

使用IDA Pro动态调试Android APP

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 关于 android_server android_server 是 IDA Pro 在 Android 设备上运行的一个调试服务器。 通过在 Android 设备上运行android_server&#xff0c;IDA Pro …

SpringBoot项目同时集成Mybatis和Mybatis-plus框架

1. 背景 Mybatis-plus可以生成CRUD&#xff0c;减少开发中SQL编写量&#xff0c;但是某些情况下我们需要多表关联查询&#xff0c;这时候Mybatis可以手写SQL的优势就体现出来了&#xff0c;在实际开发中&#xff0c;项目里面一般都是Mybatis和Mybatis-Plus公用&#xff0c;但是…

【Geoserver使用】Geoserver 3前瞻

文章目录 前言一、GeoServer 3 Call for Crowdfunding&#xff08;GeoServer 3 呼吁众筹&#xff09;二、Geoserver 3升级内容1.升级到3的几个原因2.Geoserver 3的四个升级方向 总结 前言 今天来看看最近Geoserver官方发布的关于Geoserver 3重大升级众筹这篇官方博客中提到的几…

漫步者头戴式耳机怎么样?漫步者、西圣、索尼三大耳机测评对比

自头戴式耳机诞生以来&#xff0c;凭借其出色的音质表现和时尚造型&#xff0c;迅速赢得了音乐爱好者的青睐。头戴式耳机不仅能够带来更加沉浸的听觉体验&#xff0c;还具备较强的降噪功能&#xff0c;让用户在嘈杂环境中依然能专注于音乐世界。 与入耳式耳机相比&#xff0c;…

【PyVista】网状结构,标和单元[mesh,point,cell]的介绍

[PyVista] 介绍-CSDN博客中介绍给pyvista的介绍和简单的使用。接下来看看mesh的使用。 一&#xff0c;什么是网格? 在PyVista中&#xff0c;网格是任何空间引用信息&#xff0c;通常由三维空间中的表面或体积的几何表示组成。我们通常将任何空间引用的数据集称为网格&#xf…

回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量…

【java】常见限流算法原理及应用

目录 前言 限流的作用 4种常见限流算法 固定窗口限流 基本原理 简单实现 优点和缺点 滑动窗口限流 基本原理 简单实现 优点和缺点 漏桶限流 基本原理 简单实现 优点和缺点 令牌桶限流 基本原理 简单实现 优点和缺点 算法比较与选择 前言 在现代分布式系统…

102.SAPUI5 sap.ndc.BarcodeScannerButton调用摄像头时,localhost访问正常,使用IP访问失败

目录 原因 解决办法 1.修改谷歌浏览器的setting 2.在tomcat中配置https访问 参考 使用SAPUI5的sap.ndc.BarcodeScannerButton调用摄像头时&#xff0c;localhost访问正常&#xff0c;使用IP访问时&#xff0c;一直打不开摄像头&#xff0c;提示getUserMedia()问题。 原因…

【React】(推荐项目)一个用 React 构建的 CRUD 应用程序

推荐项目&#xff1a;CRUD 应用示例 在本篇文章中&#xff0c;我想向大家推荐一个非常实用的项目&#xff1a;CRUD 应用示例。这个项目展示了如何使用现代技术栈创建一个基础的增删改查&#xff08;CRUD&#xff09;应用&#xff0c;非常适合用于学习和实践后端开发技能。 适…

【工具变量】科技金融试点城市DID数据集(2000-2023年)

时间跨度&#xff1a;2000-2023年数据范围&#xff1a;286个地级市包含指标&#xff1a; year city treat post DID&#xff08;treat*post&#xff09; 样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff1a; 参考文献-pdf格式&#xff1a;https://…