Spring Boot 注解探秘:Bean 管理的艺术

news/2024/9/18 13:29:19/ 标签: spring boot, 后端, java

在 Spring Boot 应用开发中,Bean 的管理是核心功能之一。Spring Boot 提供了一套强大的注解系统,帮助开发者轻松管理 Bean 的生命周期和依赖注入。本文将深入探讨 Spring Boot 中常用的 Bean 处理注解及其应用场景。

一、@Component注解

@Component是一个基础的注解,用于标识一个类为 Spring 容器管理的 bean。当一个类被标注为@Component时,Spring容器会在启动时自动扫描并实例化这个类,将其纳入容器的管理范围。如,

java">@Compnent
public class FeignWrapper{}
java">@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) // 该注解就会自动扫描@component注解标识的FeignWrapper类
public @interface SpringBootApplication {}

二、@Service、@Repository和@Controller

这三个注解都是@Component的特定化版本,分别用于表示服务层、数据访问层和控制层的类。如,

java">@Service
public class UserServiceImpl{}@Repository
// 通过继承 Spring Data 的 Repository 接口来获得一些常用的数据访问方法,如findById、save、deleteById等。
public class UserRepository extends JpaRepository<User, Long>{}@Mapper
public class UserMapper extends BaseMapper<User>{}@Controller
public class UserController{}

值得注意的是,@Controller标准的类会直接返回视图,目前微服务项目中,基本都使用@RestController, 具体细节可查看Spring Boot 注解探秘:HTTP 请求的魅力之旅。
同时@Repository和@Mapper都用于标识数据访问层的类,但是在微服务的项目中,@Mapper使用更加频繁。

三、@Autowired

@Autowired注解用于根据类型自动注入bean。
这里还要提到@Resource,它是优先根据名称来注入bean,根据名称找不到之后,则根据类型进行匹配。如,

java">@Service
public class UserAggregate{// 方式1@Autowired private UserService userService;// 方式2@Resource(name ="userServcieImpl")private UserService userService;
}```
# 四、@Qualifier
当存在多个相同类型的bean时,可以使用@Qualifier注解来指定具体要注入的bean,如
```java
@Service
public class UserAggregate{// 方式1@Autowired @Qualifier(userServcieImpl)private UserService userService;
}

五、@Configuration和@Bean

@Configuration用于标识一个类为配置类,@Bean注解用于在配置类中定义 bean。示例可参考Eureka系列:

  • 探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(中)
  • 探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(下)——第一节
  • 探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(下)——第二节
  • 探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(下)——第三节
  • 探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(下)——第四节
  • 探究 Eureka 在 Spring Boot 中的配置注入与统一管理机制(下)——第五节

六、@Scope

@Scope注解用于定义 bean 的作用域,控制 bean 的生命周期和实例化方式。常见的作用域有 singleton、prototype、request、session 等。

1. singleton作用域

在整个 Spring 容器的生命周期中,单例 bean 只会被创建一次。无论有多少个地方请求这个 bean,始终返回同一个实例。
适用于配置读取类,日志记录类,工具类等场景。

2. prototype作用域

每次请求原型 bean 时都会创建一个新的实例。不同的请求之间不会共享同一个实例。
适用于多数据源场景。

3. request作用域

当一个 HTTP 请求进入时,Spring 容器会根据需要创建一个请求作用域的 bean 实例,并在请求处理过程中使用这个实例。当请求处理完成后,该实例通常会被销毁。销毁方法见第七节。
适用于在Web中存储用户的请求状态,如可以将用户的请求参数、认证信息等存储在一个请求作用域的 bean 中,以便在整个请求处理过程中使用

4. session作用域

同3,同样适用于Web应用,如用户的购物车信息、登录状态等可以存储在会话作用域的 bean 中,以便在用户的整个会话过程中保持一致。

七、@PostConstruct 和 @PreDestroy

@PostConstruct和@PreDestroy注解通常与 Spring 管理的 bean 一起使用。Spring 容器会在 bean 实例化完成后自动调用被@PostConstruct注解标记的方法,并在 bean 即将被销毁之前自动调用被@PreDestroy注解标记的方法。

java">@Service
public class UserServiceImpl {@PostConstructpublic void init() {// 加载用户数据的初始化操作}@PreDestroypublic void destroy() {// 清理操作,如关闭数据库连接
}

http://www.ppmy.cn/news/1524816.html

相关文章

第L6周:机器学习-随机森林(RF)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 1.什么是随机森林&#xff08;RF&#xff09; 随机森林&#xff08;Random Forest, RF&#xff09;是一种由 决策树 构成的 集成算法 &#…

python库安装失败问题

pip install XXXX 报错信息如下 D:\Dev>pip install D:\Dev\robotlib-0.0.33.tar.gz DEPRECATION: Loading egg at d:\app\dev\python\lib\site-packages\fs11a3_package-1.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replace…

mac安装swoole过程

1.很重要的是得根据自己环境的php版本来选择swoole版本&#xff01;否则都是做无用功。 Swoole 文档 2.通常pecl install swoole是安装最新版本的&#xff0c;当然安装的方式很多种&#xff0c;这里选择编译安装&#xff0c;因为可以选择不同的swoole版本进行安装&#xff0c;…

CTF中Web题目的常见题型及解题方法

基础知识类题目# 考察基本的查看网页源代码、HTTP请求、修改页面元素等。 这些题很简单&#xff0c;比较难的比赛应该不会单独出&#xff0c;就算有因该也是Web的签到题。 实际做题的时候基本都是和其他更复杂的知识结合起来出现。 姿势&#xff1a;恶补基础知识就行 查看网…

【无人机设计与控制】固定翼四旋翼无人机UAV俯仰姿态飞行模糊自整定PID控制Simulink建模

摘要 本研究设计了一种基于模糊自整定PID控制的固定翼四旋翼无人机俯仰姿态控制系统。利用Simulink建立了无人机俯仰控制系统模型&#xff0c;通过模糊控制器自适应调节PID参数&#xff0c;实现了对无人机俯仰角度的精确控制。实验结果表明&#xff0c;该控制策略在不同飞行状…

Java中NoSQL 与分布式数据库

Java 中的 NoSQL 与分布式数据库 随着大数据、云计算和分布式系统的快速发展&#xff0c;传统的关系型数据库&#xff08;如 MySQL、PostgreSQL 等&#xff09;在处理大规模数据时往往会遇到扩展性和性能上的瓶颈。为了解决这些问题&#xff0c;NoSQL 数据库和分布式数据库应运…

启动 Spring Boot 项目时指定特定的 application.yml 文件位置

java -jar your-spring-boot-app.jar --spring.config.locationfile:/path/to/your/config/application.yml your-spring-boot-app.jar 是你的 Spring Boot 应用的 JAR 文件名。file:/path/to/your/config/application.yml 是配置文件的绝对路径。 如果你有多个配置文件&#…

机器学习--神经网络

神经网络 计算 神经网络非常简单&#xff0c;举个例子就理解了&#xff08;最后一层的那个写错了&#xff0c;应该是 a 1 ( 3 ) a^{(3)}_1 a1(3)​&#xff09;&#xff1a; n o t a t i o n notation notation&#xff1a; a j ( i ) a^{(i)}_j aj(i)​ 表示第 i i i 层的…

嵌入式学习路线+嵌入式校招建议 嵌入式学习面试规划

随着物联网、人工智能以及5G等技术的迅猛发展&#xff0c;嵌入式系统的需求逐渐增多。作为毕业生&#xff0c;如何制定一个合理的学习路线&#xff0c;以确保在找工作、参加校招时有足够的竞争力&#xff0c;是非常重要的。我会为你提供一个更加详细、系统的学习路线建议&#…

【必看!多系统萎缩患者的维生素补给站,守护你的健康每一天✨】

亲爱的朋友们&#xff0c;今天我们要聊一个温暖而重要的话题——关于多系统萎缩&#xff08;MSA&#xff09;患者如何科学补充维生素&#xff0c;让爱与健康同行&#xff01;&#x1f496; &#x1f308; 认识多系统萎缩MSA 首先&#xff0c;让我们简单了解一下多系统萎缩。M…

k8s的配置管理

一、配置管理分为两种&#xff1a; 1. 加密配置&#xff1a;用来保存密码和token密钥对以及其它敏感的k8s资源。 2.应用配置&#xff1a;我们需要定制化的给应用进行配置&#xff0c;我们需要把定制好的配置文件同步到pod当中的容器。 二、加密配置 1.secret三种类型&#xf…

Java笔试面试题AI答之单元测试JUnit(3)

文章目录 13. 什么是注释以及它们如何在JUnit中有用&#xff1f;什么是注释&#xff08;Annotation&#xff09;&#xff1f;注释在JUnit中的用途 14. 解释如何测试”受保护”方法&#xff1f;1. 使用子类2. 同一包内直接测试3. 反射&#xff08;在支持的语言中&#xff09;4. …

Oracle数据库中的动态SQL(Dynamic SQL)

Oracle数据库中的动态SQL是一种在运行时构建和执行SQL语句的技术。与传统的静态SQL&#xff08;在编写程序时SQL语句就已经确定&#xff09;不同&#xff0c;动态SQL允许开发者在程序执行过程中根据不同的条件或用户输入来构建SQL语句。这使得动态SQL在处理复杂查询、存储过程中…

一、链表-算法总结

文章目录 一、链表1.1 提纲1.2 链表删除1.2.1 删除排序链表中的重复元素&#xff08;仅保留一个重复元素&#xff09;1.2.2 删除排序链表中的重复元素 II &#xff08;删除所有重复的元素&#xff09; 1.3 链表反转1.3.1 反转链表1.3.2 反转链表 1.4 合并链表1.4.1 合并两个有序…

STM32_startup文件详解

一、堆栈内存分配 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN3 Stack_Mem SPACE Stack_Size __initial_sp ; <h> Heap Configuration ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Heap_Siz…

ubuntu2204安装kvm

ubuntu2204安装kvm 前言一、检测硬件是否支持二、安装软件三、创建/管理虚拟机1、创建存储池2、qemu创建镜像3、xml文件运行虚拟机1、范文2、xml文件创建虚机3、创建虚机 4、克隆虚机5、创建快照6、脚本创建VNC连接 四、创建集群1、安装glusterfs2、加入集群删除节点 3、 创建卷…

Web开发之Vue.js

第一章 一、前端开发技术发展变化历程 洪荒时代&#xff08;1990 - 1994 年&#xff09;&#xff1a; 技术萌芽&#xff1a;1990 年&#xff0c;第一个 web 浏览器诞生&#xff1b;1991 年&#xff0c;www 诞生&#xff0c;标志着前端技术的开始。此时没有专业的前端&#x…

学学vue-2

1.7 指令修饰符 keyup.enter&#xff1a;监听键盘回车事件&#xff0c;回车触发事件keyup.enter代码 v-model修饰符&#xff1a; v-model.trim&#xff1a;去首尾空格v-model.number&#xff1a;变数字&#xff08;如果是数字的话&#xff0c;转变为数字&#xff09; 事件名.…

k8s 高级调度

搞懂Kubernetes调度 K8S调度器Kube-schduler的主要作用是将新创建的Pod调度到集群中的合适节点上运行。kube-scheduler的调度算法非常灵活&#xff0c;可以根据不同的需求进行自定义配置&#xff0c;比如资源限制、亲和性和反亲和性等。 kube-scheduler的工作原理如下&#x…

基于大数据爬虫的高校网络舆情管控可视化大屏分析系统 8ov8c

目录 技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取 技术栈和环境说明 本系统以Python开发语言开发&am…