前端进阶全栈计划:Spring扫盲

Spring扫盲

请添加图片描述

spring 和 springboot的关系?

类比前端:vue.js和nuxt.js的关系

Spring Boot 是基于 Spring 框架的快速开发工具,简化了 Spring 应用的配置和部署。

spring核心特性

1. 依赖注入

依赖注入是Spring框架的核心功能之一。它允许你通过配置将对象的依赖关系注入到对象中,而不是在代码中直接创建依赖对象。这使得代码更加松散耦合,更容易测试和维护。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service // 1. 标注这个类是一个Spring服务组件
public class UserService {// 2. 声明一个UserRepository类型的成员变量,这个变量会被Spring容器注入依赖private final UserRepository userRepository;@Autowired // 3. 使用@Autowired注解指示Spring在创建UserService实例时注入UserRepository依赖public UserService(UserRepository userRepository) {// 4. 通过构造函数注入,将传入的UserRepository实例赋值给成员变量this.userRepository = userRepository;}// 5. 服务类的方法可以使用注入的UserRepository进行数据库操作public List<User> findAllUsers() {return userRepository.findAll();}
}

2. 面向切面编程(AOP)

允许你将横切关注点(如日志记录、事务管理、安全性等)从业务逻辑中分离出来。这使得代码更加清晰,并且可以更容易地重用这些横切关注点。

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;@Aspect // 1. 标注这个类是一个Aspect(切面),定义横切关注点
@Component // 2. 将这个类声明为Spring的组件,使得Spring容器可以管理它的生命周期
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))") // 3. 定义一个前置通知,在目标方法执行之前运行public void logBefore(JoinPoint joinPoint) {// 4. JoinPoint参数提供对连接点(目标方法)的访问System.out.println("Method called: " + joinPoint.getSignature().getName());// 5. 输出目标方法的签名(名称)}
}

3. 模块化架构

Spring框架是模块化的,你可以根据需要选择和使用不同的模块。常用模块包括:

  • Spring Core:提供依赖注入和核心容器。
  • Spring AOP:提供面向方面编程支持。
  • Spring ORM:提供与ORM框架(如Hibernate)的集成。
  • Spring MVC:提供Web应用开发的支持。
  • Spring Security:提供安全性支持。
  • Spring Data:简化数据访问层的开发。

4. 声明式事务管理

Spring提供了声明式事务管理,你可以使用注解或XML配置来定义事务边界,而无需在代码中显式管理事务。

// 标注这个类为一个服务类,通常由Spring IOC容器管理
@Service
public class TransactionalService {// 使用@Transactional注解表示该方法是一个事务性操作// 声明式事务管理:使用注解的方式来管理事务,无需手动控制事务的开始、提交和回滚@Transactionalpublic void performTransactionalOperation() {// 在这个方法中执行的所有数据库操作会在一个事务中进行// 如果方法执行过程中抛出未捕获的运行时异常,则事务会被回滚// 否则,事务会在方法执行完毕后提交}
}

5. 数据访问抽象

Spring提供了对JDBC、JPA、Hibernate等数据访问技术的抽象和简化,使得数据访问层的代码更加简洁和容易维护。

 @Repositorypublic interface UserRepository extends JpaRepository<User, Long> {// Spring Data JPA repository interface}

6. spring mvc

Spring MVC是一个强大的Web框架,提供了用于构建Web应用程序的工具和功能。它遵循Model-View-Controller(MVC)设计模式,分离了业务逻辑、视图和控制器。

  @Controllerpublic class UserController {@GetMapping("/users")public String getUsers(Model model) {model.addAttribute("users", userService.findAll());return "userList";}}

7. spring security

Spring Security是一个功能强大的安全框架,提供了全面的认证和授权功能。它可以保护Web应用、方法调用以及提供基于声明的安全性配置。

// 使用@Configuration注解标记这是一个配置类
@Configuration
// 通过@EnableWebSecurity注解开启Spring Security的功能
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {// 重载configure方法以配置如何通过拦截器保护请求@Overrideprotected void configure(HttpSecurity http) throws Exception {http// 对请求进行授权.authorizeRequests()// 指定路径 "/admin/**" 下的请求需要具备 "ADMIN" 角色.antMatchers("/admin/**").hasRole("ADMIN")// 除了 "/admin/**" 外的所有请求都需要认证.anyRequest().authenticated().and()// 配置表单登录.formLogin()// 允许所有用户访问我们的登录页(例如登录页面,失败页面等).permitAll();}
}

8. 远程访问和消息传递

Spring提供了对远程调用(如RMI、Hessian、Burlap、HTTP Invoker)和消息传递(如JMS、AMQP)的支持,简化了分布式系统的开发。

// 使用@Component注解标记这个类为Spring的组件。
// 这意味着Spring会在启动时自动扫描并注册这个类的实例到Spring应用上下文中。
@Component
public class MessageReceiver {// @JmsListener注解标记这个方法为一个JMS消息监听器方法,用于接收消息。// destination属性指定了这个监听器所监听的目的地(队列或主题)的名称。@JmsListener(destination = "queue.name")public void receiveMessage(String message) {// 当消息到达指定的目的地时,此方法会被调用,并将接收到的消息作为参数传入。// 这里仅将接收到的消息打印到控制台。System.out.println("Received message: " + message);}
}

9. 外部化配置

Spring支持将应用配置外部化,通过application.propertiesapplication.yml文件,以及环境变量、命令行参数等方式进行配置管理。

 # application.propertiesserver.port=8080

10. 测试支持

Spring提供了全面的测试支持,允许你使用Spring的依赖注入和上下文管理来编写单元测试和集成测试。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.List;import static org.junit.Assert.assertNotNull;@RunWith(SpringRunner.class) // 1. 使用SpringRunner来运行测试,这个类是Spring和JUnit的集成支持
@SpringBootTest // 2. 标注这是一个Spring Boot的测试类,启动整个Spring上下文
public class UserServiceTest {@Autowired // 3. 自动注入UserService实例private UserService userService;@Test // 4. 标注这是一个测试方法public void testFindAllUsers() {// 5. 调用UserService的findAll方法List<User> users = userService.findAll();// 6. 断言结果不为nullassertNotNull(users);}
}

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

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

相关文章

Windows系统安装MySQL8.0.38

MySQL 8.0 相对于 MySQL 5.7 来说有几个显著的区别和改进&#xff0c;以下是一些主要的区别&#xff1a; JSON 数据类型和函数改进&#xff1a; MySQL 8.0 引入了更多的 JSON 支持&#xff0c;包括 JSON 数据类型、JSON 函数和操作符。这使得存储和查询 JSON 数据更加方便和高效…

从头开始构建 RAG 的 LLM 代理:综合指南

GPT-3、GPT-4 等 LLM 及其开源版本经常难以检索最新信息&#xff0c;有时会产生幻觉或不正确的信息。 检索增强生成 (RAG)是一种将 LLM 的强大功能与外部知识检索相结合的技术。RAG 使我们能够将 LLM 响应建立在事实、最新的信息之上&#xff0c;从而显著提高 AI 生成内容的准…

还敢乱买智能猫砂盆?今天扒一扒糯雪、鸟语花香、CEWEY智能猫砂盆!

在这高科技迅速发展的时代&#xff0c;连猫咪用来拉屎的屎盆子也变成了全自动化&#xff0c;从普通的猫砂盆变成了智能猫砂盆&#xff0c;让铲屎官再也不用每天赶回家铲屎给猫整理烂摊子&#xff0c;实在是非常轻松。所以那个时候的我也果断扔掉了家里的猫砂盆&#xff0c;转而…

电子电路学习笔记(4)三极管

部分内容参考链接&#xff1a; 电子电路学习笔记&#xff08;5&#xff09;——三极管_三极管 箭头-CSDN博客 模拟电子技术基础笔记&#xff08;4&#xff09;——晶体三极管_集电结的单向导电性-CSDN博客 硬件基本功-36-三极管Ib电流如何控制Ic电流_哔哩哔哩_bilibili MOS…

使用DC/AC电源模块时需要注意的事项

BOSHIDA 使用DC/AC电源模块时需要注意的事项 1. 仔细阅读和理解产品说明书&#xff1a;在使用DC/AC电源模块之前&#xff0c;应该仔细阅读和理解产品说明书&#xff0c;了解其性能特点、技术要求和使用方法&#xff0c;以确保正确使用和避免潜在的安全风险。 2. 选择适当的电…

源代码编译安装LAMP

Apache简介 主要特点 开放源代码&#xff0c;跨平台应用 支持多种网页编程程序 模块化设计&#xff0c;运行稳定&#xff0c;良好得安全性 软件版本 1.X 目前最高版本是1.3&#xff0c;运行稳定 向下兼容性较好&#xff0c;但缺乏一些较新得功能 2.X 目前最高版本是2.4 …

PDF处理篇:如何调整 PDF 图像的大小

将视觉效果无缝集成到 PDF 中的能力使它们成为强大的通信工具。然而&#xff0c;笨拙的图像大小会迅速扰乱文档的流程&#xff0c;阻碍清晰度和专业性。幸运的是&#xff0c;GeekerPDF 和Adobe Acrobat等流行的应用程序提供了用户友好的解决方案来应对这一挑战。这个全面的指南…

Google 发布了最新的开源大模型 Gemma 2,本地快速部署和体验

Gemma 2 是 Google 最新发布的开源大语言模型。它有两种规模&#xff1a;90 亿&#xff08;9B&#xff09;参数和 270 亿&#xff08;27B&#xff09;参数&#xff0c;分别具有基础&#xff08;预训练&#xff09;和指令调优版本&#xff0c;拥有 8K Tokens 的上下文长度&#…

Vue3 特点以及优势-源码解剖

Vue3 特点以及优势-Vue3.4源码解剖 Vue3 特点以及优势 1.声明式框架 命令式和声明式区别 早在 JQ 的时代编写的代码都是命令式的&#xff0c;命令式框架重要特点就是关注过程声明式框架更加关注结果。命令式的代码封装到了 Vuejs 中&#xff0c;过程靠 vuejs 来实现 声明式代…

关于 VuePress 的插件

插件就好比第三方功能&#xff0c;例如增加一个阅读进度条、增加光标效果等。VuePress 官网对插件的介绍&#xff1a;插件通常会为 VuePress 添加全局功能。 这里简单介绍几个本站用的插件吧&#xff01; ‍ ‍ 插件就好比第三方功能&#xff0c;例如增加一个阅读进度条、增…

如何实现在短信链接中直接打开微信小程序

你是否有过这样的体验&#xff0c;收到一条短信&#xff0c;里面有一个链接&#xff0c;点击后就直接打开了微信&#xff0c;并且进入了一个小程序。这种神奇的功能是如何实现的呢&#xff1f;本文将为你揭晓答案。 利用微信URL Link 接口生成链接 要实现短信中的链接直接打开…

VSG虚拟同步发电机simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 VSG虚拟同步发电机simulink建模与仿真&#xff0c;虚拟同步发电机&#xff08;Virtual Synchronous Generator, VSG&#xff09;技术是电力电子领域的一项重要创新&#xff0c…

Golang 依赖注入设计哲学|12.6K 的依赖注入库 wire

一、前言 线上项目往往依赖非常多的具备特定能力的资源&#xff0c;如&#xff1a;DB、MQ、各种中间件&#xff0c;以及随着项目业务的复杂化&#xff0c;单一项目内&#xff0c;业务模块也逐渐增多&#xff0c;如何高效、整洁管理各种资源十分重要。 本文从“术”层面&#…

爆火AI惨遭阉割,1600万美国年轻人集体「失恋」? Character AI被爆资金断裂,00后炸了

【新智元导读】最近&#xff0c;在美国00后中爆火的Character AI&#xff0c;竟然把聊天机器人对话模型给「阉割」了&#xff1f;愤怒的年轻人们冲进社区&#xff0c;抱怨的声浪快要掀翻天了&#xff01;而这背后&#xff0c;似乎还有谷歌或Meta的授意。 美国当今最火爆的社交…

看个病都有大模型陪诊了!上海市第一人民医院主导,一手体验在此

现在看个病&#xff0c;都有大模型全程陪诊了。 这是上海市第一人民医院此时此时正在发生的事情—— AI就医助理&#xff0c;无需下载APP&#xff0c;打开支付宝就能用。 从诊前预约挂号、在线取号&#xff0c;到诊中院内导航、排队叫号、扫码支付&#xff0c;再到诊后的报告…

基于SpringBoot高校体育运动会管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

KVB交易平台 :市场迎来新热潮!铜价会持续上涨吗?

近期&#xff0c;全球铜价出现明显上涨趋势。韩国光阳LME仓库的铜库存显著下降&#xff0c;市场对即时需求的增加作出了积极反应。供应端的紧张和需求端的复苏共同推动了铜价的上涨。 KVB外汇 分析师们对未来铜价保持谨慎乐观态度&#xff0c;认为长期内铜价有望保持稳定甚至进…

【面试系列】UI设计师高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

守望先锋2延迟高、卡顿、丢包的解决方法一览

守望先锋2/ow2是一款在全球范围内拥有超高热度的特殊游戏&#xff0c;因为该作在一定程度上是FPS游戏融合了MOBA元素&#xff0c;守望先锋2中的每一位英雄之间都有克制因素&#xff0c;使其技能点形成闭环逻辑&#xff0c;提升了游戏的可重复游戏性和趣味性。不过很多玩家在游玩…

三菱A系列网络连接

寄存器名 读写 寄存器类型 变量类型 寄存器范围 说明 X##1 R/W BIT I/O离散 0&#xff0d;7FF Input Y##1 R/W BIT I/O离散 0&#xff0d;7FF Output M##1 R/W BIT I/O离散 0&#xff0d;9255 Internal relay B##1 R/W BIT I/O离散 0&#xff0d;3FF Link relay F##1 R/W BIT I…