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

news2024/10/7 14:24:15

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注解表示该方法是一个事务性操作
    // 声明式事务管理:使用注解的方式来管理事务,无需手动控制事务的开始、提交和回滚
    @Transactional
    public void performTransactionalOperation() {
        // 在这个方法中执行的所有数据库操作会在一个事务中进行
        // 如果方法执行过程中抛出未捕获的运行时异常,则事务会被回滚
        // 否则,事务会在方法执行完毕后提交
    }
}

5. 数据访问抽象

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

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

6. spring mvc

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

  @Controller
  public 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方法以配置如何通过拦截器保护请求
  @Override
  protected 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.properties
  server.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. 断言结果不为null
        assertNotNull(users);
    }
}

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

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

相关文章

Golang | Leetcode Golang题解之第206题反转链表

题目&#xff1a; 题解&#xff1a; func reverseList(head *ListNode) *ListNode {if head nil || head.Next nil {return head}newHead : reverseList(head.Next)head.Next.Next headhead.Next nilreturn newHead }

什么是Web3D交互展示?有什么优势?

在智能互联网蓬勃发展的时代&#xff0c;传统的图片、文字及视频等展示手段因缺乏互动性&#xff0c;正逐渐在吸引用户注意力和提升宣传效果上显得力不从心。而Web3D交互展示技术的横空出世&#xff0c;则为众多品牌与企业开启了一扇全新的展示之门&#xff0c;让线上产品体验从…

学校卫星电子怎么自动校准时间呢

在学校的教室里&#xff0c;卫星电子钟精准地为师生们提供着时间服务&#xff0c;而其自动校准时间的功能令人称奇。那么&#xff0c;学校卫星电子钟是如何实现自动校准时间的呢&#xff1f; 学校卫星电子钟自动校准时间的原理基于卫星导航系统。常见的如北斗卫星导航系统或 GP…

小程序-<web-view>嵌套H5页面支付功能

背景&#xff1a;小程序未发布前&#xff0c;公司使用vue框架搭建了管理系统&#xff0c;为了减少开发成本&#xff0c;微信提供了web-view来帮助已有系统能在小程序上发布&#xff0c;详见web-view | 微信开放文档。因公司一直未打通嵌套H5小程序的支付功能&#xff0c;导致用…

湖北建筑安全员A证跨省调出审核不通过?可能是这些原因

湖北建筑安全员A证跨省调出审核不通过&#xff1f;可能是这些原因 湖北建筑安全员A证跨省调出审核不通过怎么办&#xff1f; 湖北建筑安全员ABC正常情况下都是可以跨省调出的&#xff0c;现在建筑三类人员安全员ABC在全国工程质量安全监管信息平台都是可以查询的&#xff0c;在…

offer150-16:数值的整数次方

题目描述:实现函数double Power(double base,int exponent),求base 的exponent次方。不得使用库函数&#xff0c;同时不需要考虑大数问题。 分析&#xff0c;题目要求实现库函数pow(),由于不需要考虑大数问题&#xff0c;不必担心溢出&#xff0c;那么就需要对输入的各种情况进…

LeetCode热题100刷题3:3. 无重复字符的最长子串、438. 找到字符串中所有字母异位词、560. 和为 K 的子数组

3. 无重复字符的最长子串 滑动窗口、双指针 class Solution { public:int lengthOfLongestSubstring(string s) {//滑动窗口试一下//英文字母、数字、符号、空格,ascii 一共包含128个字符vector<int> pos(128,-1);int ans 0;for(int i0,j0 ; i<s.size();i) {//s[i]…

【Python网络通信】基于Bypy调用百度网盘api实现自动上传和下载网盘文件

网盘对于大家的生活工作可以说是息息相关&#xff0c;但是如果每天都重复去上传下载文件就会很浪费时间&#xff0c;所以有没有什么办法可以解放双手&#xff1f;那就是网盘接口&#xff0c;本文通过Bypy库实现百度网盘的自动上传和下载文件。 原创作者&#xff1a;RS迷途小书童…

java 面试题 - 索引

上脑图&#xff0c;大家要记住&#xff01;&#xff01; 看不清&#xff0c;上大图&#xff01; 这几总结就够用&#xff01;&#xff01;

SpringBoot苏桦旅游管理系统-计算机毕业设计源码02123

摘要 旅游业在全球范围内不断发展&#xff0c;为了提供高效的旅游管理和服务&#xff0c;开发一个旅游管理系统具有重要意义。本文旨在设计和实现该旅游管理系统&#xff0c;以满足用户和管理员的需求。该系统采用Spring Boot作为后端框架&#xff0c;利用其简化的开发流程和强…

六、【源码】应用上下文

源码地址&#xff1a;https://github.com/spring-projects/spring-framework 仓库地址&#xff1a;https://gitcode.net/qq_42665745/spring/-/tree/06-application-context 应用上下文 实现应用上下文的核心类&#xff1a; 1.ApplicationContext&#xff1a;Spring 应用上…

java设计模式(五)建造者模式(Builder Pattern)

1、模式介绍&#xff1a; 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许你创建一个复杂对象的表示&#xff0c;同时隐藏了创建细节。该模式将对象的构建过程和表示分离&#xff0c;使得相同的构建过程可以创建不同的表示。 2、应…

如何选择适合自己的巴比达内网穿透方案

选择适合自己的巴比达内网穿透方案&#xff0c;需要考虑几个关键因素&#xff0c;包括您的具体需求、安全性要求、技术水平以及预算。以下是一些选择巴比达内网穿透方案的建议步骤&#xff1a; 1. 确定需求和用途 首先&#xff0c;需要明确您希望通过内网穿透实现的具体目标和…

项目实战-MySQL极佳优化方案---前缀索引

一、应用背景 由于公司项目数据量较大&#xff0c;开发小程序和APP过程中&#xff0c;SQL查询超过1.5s以上的等待时间&#xff0c;因此需要对SQL或者数据表结构设计进行优化。就不讲SQL语句优化啦&#xff0c;而是记录一下数据表结构设计优化的前缀索引实现。 二、MySQL索引 …

Transformer拆积木

文章目录 ConceptsEmbeddingEncoderDecoderSelf-Attention matric calculationFinal Linear and Softmax LayerLoss function 参考 学一下已经问鼎中原七年之久的Transformer Concepts 开始拆积木&#xff01; Embedding Encoder Decoder Self-Attention matric calculati…

PHP房产小程序微信小程序系统源码

&#x1f3e0;—— 购房租房&#xff0c;一“指”搞定&#x1f3e1; &#x1f50d;【开篇&#xff1a;房产新视界&#xff0c;尽在掌握】 在这个信息爆炸的时代&#xff0c;找房子不再是一场漫长的奔波。有了“房产微信小程序”&#xff0c;无论是购房还是租房&#xff0c;都…

如何从Salesforce顾问转型为解决方案架构师?

在充满活力的Salesforce咨询领域&#xff0c;许多专业人士都希望从顾问转型为解决方案架构师。这种转型不仅需要掌握新技能&#xff0c;还需要从根本上改变思维方式。关键在于摆脱顾问典型的以职能为中心的思维模式&#xff0c;拥抱更广阔、更具战略性的视角。 从“如何”到“…

手把手教你在QQ微信上AI变声器安装和使用(软件下载)

获取方式&#xff1a;点击下载 你相信互联网上还有真的东西么&#xff1f;我反正越来越不相信了&#xff01; 比如&#xff0c;和你在网上眉来眼去语音撩骚的小姐姐&#xff0c;可能就是一个抠脚大汉。 而抠脚大汉&#xff0c;也可以是一个漂亮的小姐姐。 o(*&#xffe3;︶…

发表EI论文相当于SCI几区?

EI&#xff08;工程索引&#xff09;本身并不进行分区&#xff0c;它是一个收录工程领域高质量文献的数据库&#xff0c;与SCI&#xff08;科学引文索引&#xff09;的分区制度不同。然而&#xff0c;在非正式的学术评价中&#xff0c;有时人们会将EI与SCI的分区进行比较。 虽…