SpringBoot复习:(21)自定义ImportBeanDefinitionRegistrar

这篇具有很好参考价值的文章主要介绍了SpringBoot复习:(21)自定义ImportBeanDefinitionRegistrar。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要达到的目的:将某个包下使用了某个自定义注解(比如@MyClassMapper)的类注册到Spring 容器。
一、自定义注解:

package com.example.demo.service;


import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface MyClassMapper {
}

二、使用了自定义注解的组件类:

package com.example.demo.service;

@MyClassMapper
public class HelloService {
    public HelloService(){
        System.out.println("this is hello......");
    }
}

三、自定义一个ClasspathBeanDefinitionScanner:

package com.example.demo.component;

import com.example.demo.service.MyClassMapper;
import com.example.demo.service.MybatisMapper;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.stereotype.Component;

import java.util.Set;


public class MyClasspathBeanDefinitionScanner extends ClassPathBeanDefinitionScanner {
    public MyClasspathBeanDefinitionScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters) {
        super(registry, useDefaultFilters);
    }


    protected void registerFilters() {
        addIncludeFilter(new AnnotationTypeFilter(MyClassMapper.class));
    }
    @Override
    protected Set<BeanDefinitionHolder> doScan(String... basePackages) {
        return super.doScan(basePackages);
    }
}


四、自定义ImportBeanDefinitionRegistrar

package com.example.demo.component;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.stereotype.Component;

@Component
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    public static String BASE_PACKAGE = "com.example.demo.service";
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        MyClasspathBeanDefinitionScanner scanner = new MyClasspathBeanDefinitionScanner(registry, false);
        scanner.registerFilters();
        scanner.doScan(BASE_PACKAGE);
    }
}

其中调用MyClasspathBeanDefinitionScanner进行组件扫描。

五、将自定义ImportBeanDefinitionRegistrar配置到容器

package com.example.demo.config;

import com.example.demo.component.MyClasspathBeanDefinitionScanner;
import com.example.demo.component.MyImportBeanDefinitionRegistrar;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(MyImportBeanDefinitionRegistrar.class)
public class MyConfig {
}

六、测试代码文章来源地址https://www.toymoban.com/news/detail-629611.html

package com.example.demo;

import com.example.demo.service.HelloService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.PropertySource;

@SpringBootApplication
@PropertySource("classpath:my.properties")
public class DemoApplication {

	public static void main(String[] args) {
		ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
		System.out.println("abc");
		HelloService helloService = (HelloService) context.getBean("helloService");
		System.out.println(helloService);



	}

}

到了这里,关于SpringBoot复习:(21)自定义ImportBeanDefinitionRegistrar的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF实战学习笔记21-自定义首页添加对话服务

    定义接口与实现 添加自定义添加对话框接口 添加文件:Mytodo.Dialog.IDialogHostAware.cs 添加自定义添加对话框显示接口 注意dialogHostName应与view中dialoghost 的Identifier属性一致 实现IDialogHostService接口 添加文件:Mytodo.Dialog.DialogHostService.cs DialogHostService实现了自定义的IDialogHostService接口

    2024年02月15日
    浏览(37)
  • 数据结构期末复习(1)学科定义、组成、算法的定义、时间复杂度比较

    目录 数据结构的几个方面 逻辑结构的描述 逻辑结构 存储结构 数据运算 数据结构和数据类型 数据类型 抽象数据类型(ADT) 算法及其描述 什么是算法 算法分析 算法的设计目标 算法时间性能分析 计算算法频度 算法时间复杂度 简化的算法时间复杂度分析 数据结构学科定义:

    2024年02月03日
    浏览(33)
  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心

    FlashDuty:一站式告警响应平台,前往此地址免费体验! FlashDuty 已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了 Lables 进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求,比如人工标记一个故障是否为误报。因此我们提供了 自定义字

    2024年02月08日
    浏览(34)
  • springboot升级到jdk21最新教程

    1.1 POM文件 最近很多小伙伴私信我要我出一个springboot搭配jdk21的教程,应粉丝要求,我去spring官网找到了springboot和jdk版本的是配图,供大家参考!之前博主写的springboot 3.0.0 搭配jdk20不知道各位小伙伴们有没有看过呢?现在jdk21出来了,springboot 3.0.0的版本已经不够用了,需要升

    2024年02月08日
    浏览(33)
  • Java21 + SpringBoot3集成WebSocket

    近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。 本项目为前后端分离开发,后端基于 Java21 和 SpringBoot3 开发,前端提供了vue、angular、react、uniap

    2024年01月23日
    浏览(45)
  • SpringBoot复习:(44)MyBatisAutoConfiguration

    可以看到MyBatisAutoConfiguration引入了MyBatisProperties这个属性: MyBatisAutoConfiguration中配置了一个SqlSessionFactoryBean,代码如下: 可以配置mybatis-config.xml,需要配置文件里指定: mybatis.config-location=classpath:/mybatis-config.xml 同样可配置MyBatis的xml mapper(如果不用注解mapper): mybatis.mapper-location

    2024年02月12日
    浏览(28)
  • SpringBoot知识点复习

    约定优于配置:Spring Boot鼓励开发人员遵循一组默认约定,减少配置的复杂性。 自动配置:Spring Boot可以自动配置应用程序,根据项目的依赖和需要自动配置Spring特性。 嵌入式Web服务器:Spring Boot提供了内嵌的Web服务器,如Tomcat、Jetty和Undertow,使Web应用程序的部署变得简单。

    2024年02月05日
    浏览(34)
  • SpringBoot复习:(36)国际化

    一、Resources目录下建立一个目录(比如international)来存储资源文件 message.properties 空的,但不能没有 message_zh_CN.properties message_en_us.properties 二、自动配置类MessageSourceAutoConfiguration 常量MESSAGE_SOURCE_BEAN_NAME为messageSource,也就是有这个名字的bean,则自动配置失效。 因为有@Conditional(R

    2024年02月13日
    浏览(39)
  • SpringBoot复习:(7)@Profile注解

    其中,student这个bean只有指定了profile才会装配,比如在application.properties中: @Profile注解不仅可以用在@Bean上,还可以用在注解类上,用在注解类时 只有设定了profile为指定的值,该配置类中的所有bean才会装配

    2024年02月15日
    浏览(31)
  • 从0开始搭建jdk-21 springboot 3.1项目

    从0开始搭建jdk-21 springboot项目 idea创建新项目 pom添加依赖 编写程序入口 添加yml配置文件 添加测试类 添加并测试home接口 添加commons lang 依赖 mysql数据库操作相关 添加musql-connect-java依赖 在yml文件中配置数据库信息 引入mybatis plus 引入mybatis plus generator插件 添加knife4j 4.0 knife4j增

    2024年01月25日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包