大数跨境
0
0

自定义注解和组件扫描在Spring Boot中动态注册Bean

自定义注解和组件扫描在Spring Boot中动态注册Bean Spring全家桶实战案例
2024-10-11
0
导读:自定义注解和组件扫描在Spring Boot中动态注册Bean

最新实战案例锦集:《Spring Boot实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。

环境:Spring Boot 3.2.5



1. 简介

在某些场景下,我们可能需要更加灵活地控制应用程序中哪些类应该被创建为Bean对象。为了实现这一目标,本文将深入探讨如何通过自定义注解结合Spring框架的组件扫描机制,来自动检测并动态注册这些类为Bean。

首先,我们将定义一个自定义注解。此注解的主要目的是作为标记,用于标识那些希望被自动识别和处理的类。接着,文章会介绍如何使用@Import注解配合ImportBeanDefinitionRegistrar接口,在Spring容器初始化过程中根据这些自定义注解自动扫描相关类,并将其注册为Bean。这种方式不仅简化了配置管理,也使得应用程序更加模块化与可扩展。通过具体的代码示例和步骤说明,读者可以清晰地了解整个过程,并能够快速应用于实际项目中。

2. 实战案例

2.1 自定义注解

@Target(TYPE)@Retention(RUNTIME)@Documentedpublic @interface Pack {  // 可以设置该值,该值将会作为beanName注册到容器中  String value() default "" ;}

该类的作用类似于Spring中的@Component,标识类是可被注册为Bean对象的。这里的value属性,可不设置,如果不设置将会自动根据当前的类生成beanName,默认将会是当前类的名称(首字母小写)。

2.2 定义Enable注解

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(PackComponentScanRegistrar.class)public @interface PackComponentScan {
  // basePackages属性的快捷定义方式 @AliasFor("basePackages") String[] value() default {};  // 定义要扫描的包,这里会有value属性通用 @AliasFor("value") String[] basePackages() default {};  // 以class形式定义要扫描的包(根据class当前所在的package) Class<?>[] basePackageClasses() default {};}

该类的作用是启用扫描指定包下的类上具有@Pack注解的类。

在该注解上添加了关键的@Import注解,该注解设置的Class对象会被Spring容器自动处理,而核心逻辑都将在该类中实现,比如:包扫描并注册符合条件的类。

【声明】内容源于网络
0
0
Spring全家桶实战案例
Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
内容 832
粉丝 0
Spring全家桶实战案例 Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
总阅读38
粉丝0
内容832