当前位置: 首页 > news >正文

在 Spring 框架中,@ComponentScan` 扫描的注解类型

在 Spring 框架中,@ComponentScan 会扫描所有被特定注解标识的类,并将其注册为 Spring 容器中的 Bean。@ComponentScan 默认扫描的注解,主要包括 Spring 内置的核心注解以及它们的衍生注解。以下是全部被 @ComponentScan 扫描的注解类型:

1. @Component

  • 描述: 基础注解,表示一个通用的 Spring 组件,所有被标记的类都会被注册为 Bean。
  • 用途: 适用于所有需要注入到 Spring 容器中的类。

2. @Controller

  • 描述: Spring MVC 控制器类,处理 HTTP 请求,返回视图。
  • 继承: 是 @Component 的衍生注解。
  • 用途: Web 控制器层。

3. @Service

  • 描述: 用于标识业务逻辑层的服务类。
  • 继承: 是 @Component 的衍生注解。
  • 用途: 业务逻辑层。

4. @Repository

  • 描述: 用于数据访问层,DAO 类。提供异常转换功能,将数据库异常转换为 Spring 的数据访问异常。
  • 继承: 是 @Component 的衍生注解。
  • 用途: 持久化层(数据访问层)。

5. @RestController

  • 描述: 等同于 @Controller + @ResponseBody,用于开发 RESTful Web 服务。
  • 继承: 是 @Controller 的衍生注解,因此也是 @Component 的衍生注解。
  • 用途: RESTful 控制器层。

6. @Configuration

  • 描述: 用于定义配置类,通常用于 Java 配置,包含 @Bean 定义的方法。
  • 继承: 是 @Component 的衍生注解。
  • 用途: Spring 配置类,替代 XML 配置。

7. @Aspect

  • 描述: 用于定义 AOP 切面类,虽然 @Aspect 不是 @Component 的衍生注解,但通常需要和 @Component 结合使用以注册到 Spring 容器。
  • 用途: 面向切面编程(AOP)。

8. @Indexed

  • 描述: Spring 5 引入,用于加速组件扫描,标记了 @Indexed 的类会在 META-INF/spring.components 文件中被记录,以加快组件扫描速度。
  • 用途: 优化组件扫描性能。

9. @ControllerAdvice

  • 描述: 全局异常处理和数据绑定配置,可以处理应用程序所有控制器的异常。
  • 继承: 是 @Component 的衍生注解。
  • 用途: 全局控制器相关的异常处理。

10. @RestControllerAdvice

  • 描述: 相当于 @ControllerAdvice@ResponseBody 的组合,用于处理 RESTful 控制器的全局异常。
  • 继承: 是 @ControllerAdvice 的衍生注解,因此也是 @Component 的衍生注解。
  • 用途: RESTful 应用的全局异常处理。

11. @Bean

  • 描述: 虽然不直接被 @ComponentScan 扫描,但 @Bean 方法在 @Configuration 类中被定义时,返回的对象会被注册为 Spring 容器中的 Bean。
  • 用途: 定义单个 Bean 实例。

12. @Scope

  • 描述: 用于定义 Spring Bean 的作用域,如 singleton, prototype
  • 用途: 定义 Bean 的生命周期。

13. @Lazy

  • 描述: 用于标识 Bean 是否延迟初始化,直到第一次使用时才初始化。
  • 用途: 控制 Bean 的初始化时机。

14. @Conditional

  • 描述: 根据特定条件决定是否实例化 Bean。
  • 用途: 按条件注册 Bean。

15. @Import

  • 描述: 导入其他配置类或组件到当前应用上下文中。
  • 用途: 组合多个配置类或引入第三方配置。

16. @Profile

  • 描述: 指定 Bean 只在特定的 Spring 配置文件(profile)激活时被创建。
  • 用途: 按环境或配置文件(如开发、生产)注册 Bean。

17. @PropertySource

  • 描述: 加载外部属性文件(如 .properties 文件),并使其可用于注入配置。
  • 用途: 配置外部化支持。

18. @Enable* 系列注解

  • 描述: Spring 提供了多个以 @Enable 开头的注解,启用特定功能,如 @EnableScheduling, @EnableAsync, @EnableCaching, @EnableWebSecurity
  • 用途: 启用特定功能模块,如任务调度、异步处理、缓存、Web 安全等。

19. @EventListener

  • 描述: 声明一个方法为事件监听器。
  • 用途: 用于监听并处理应用程序中发布的事件。

20. @ComponentScan.Filter

  • 描述: @ComponentScan 可以使用 @ComponentScan.Filter 来包含或排除某些类或包。
  • 用途: 精细控制组件扫描的范围和条件。

21. 自定义注解

  • 描述: 你可以定义自己的注解,并通过将其标注为 @Component 或其他衍生注解(如 @Service, @Controller)来使其被 @ComponentScan 扫描。
  • 用途: 扩展和定制 Spring 的组件扫描功能。

特殊情况:

在一些第三方库或框架中,如 Spring Cloud,Spring 会扫描一些特定的注解,这些注解本身并不是 Spring 内置的,但通过元注解方式或扩展功能,使得它们能够被 @ComponentScan 识别。例如:

  • @FeignClient:用于 Spring Cloud Feign 客户端的标注。
  • @RibbonClient:用于 Spring Cloud Ribbon 客户端的标注。

总结:

@ComponentScan 会扫描所有标有 @Component 及其派生注解的类,常见的包括 @Controller, @Service, @Repository, @RestController, @Configuration,以及自定义的 @Component 注解。此外,@Aspect, @Indexed, @ControllerAdvice 等与 AOP、MVC 全局异常处理、性能优化等相关的注解也会被扫描。通过元注解方式,许多第三方注解和自定义注解也可以被 @ComponentScan 识别并注册到 Spring 容器中。


http://www.mrgr.cn/news/57465.html

相关文章:

  • 【Linux 从基础到进阶】系统故障排查思路与实战
  • excel 表格中url转图片
  • 【Fastjson反序列化漏洞:深入了解与防范】
  • 【Redis】数据结构(下)
  • BufferPool
  • 酒茶香连锁大平台周浦店签约仪式成功举办,携手并进共创辉煌
  • Bros!使用 focus 和 blur 事件时别忽略了这一点!
  • CentOS 6 修改 yun 源
  • 【Linux】 su 和 sudo 的区别剖析
  • C#,自动驾驶技术,ASAM OpenDRIVE BS 1.8.0 规范摘要与C# .NET Parser
  • 农业自动气象监测站的工作原理
  • 深入解析MySQL数据库:从基础到进阶的全面剖析
  • 哥德巴赫猜想渐行渐远
  • 《1024:致敬程序员的数字乐章》
  • Mitre ATTCK攻击技术-权限维持-定时任务
  • Flutter鸿蒙next 刷新机制的高级使用【衍生详解】
  • 【.Net】【C#】Program.cs通用代码模板
  • 企业办公文件加密软件推荐!10款企业常用文件加密软件排行榜!
  • Clickhouse 笔记(一) 单机版安装并将clickhouse-server定义成服务
  • angular-electron调用java
  • 企业团队经典的激励理论:期望理论、赫茨伯格双因素理论、马斯洛需求层次理论、X理论和Y理论
  • 分布式系统中的Session管理:实现跨服务器的用户会话共享
  • 【数据结构】顺序表和链表
  • 【1024程序员节】之C++系列完结篇:Web编程
  • Java8项目如何升级到Java21?有啥坑?
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 10月24日,星期四