首页 > 其他分享 >spring项目中自定义注解

spring项目中自定义注解

时间:2023-12-22 16:56:54浏览次数:36  
标签:applicationContext 自定义 spring MyAnnotation public Bean 注解 class

使用 BeanPostProcessor

  • BeanPostProcessor 是 Spring 框架提供的一个接口,用于在 Spring 容器中对 Bean 进行后处理。
  • 自定义注解后,可以实现一个 BeanPostProcessor 实现类,在 BeanPostProcessor 的 postProcessAfterInitialization() 方法中,使用 ClassPathScanningCandidateResolver 类来扫描带有自定义注解的类,并将扫描到的类注册到 Spring 容器中。

自定义注解 MyAnnotation:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}

实现类 MyBeanPostProcessor:

public class MyBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if (bean.getClass().isAnnotationPresent(MyAnnotation.class)) {
            // 将扫描到的类注册到 Spring 容器中
            ApplicationContext applicationContext = ApplicationContextUtils.getApplicationContext();
            applicationContext.getBeanFactory().registerSingleton(beanName, bean);
        }
        return bean;
    }
}

使用 @MyAnnotation

@MyAnnotation
public class MyBean {

    public void doSomething() {
        // ...
    }
}

获取到Bean:

ApplicationContext applicationContext = ApplicationContextUtils.getApplicationContext();

// 获取使用 @MyAnnotation 注解的 Bean
MyBean myBean = applicationContext.getBean(MyBean.class);

// 调用 Bean 的方法
myBean.doSomething();

使用 @ComponentScan

  • @ComponentScan 注解用于指定需要扫描的包。
  • 在 @ComponentScan 注解中,可以使用 includeFilters() 属性来指定需要扫描的注解

扫描使用@MyAnnotation

@SpringBootApplication
@ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = MyAnnotation.class))
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

获取Bean

ApplicationContext applicationContext = ApplicationContextUtils.getApplicationContext();

// 获取使用 @MyAnnotation 注解的 Bean
MyBean myBean = applicationContext.getBean(MyBean.class);

// 调用 Bean 的方法
myBean.doSomething();

标签:applicationContext,自定义,spring,MyAnnotation,public,Bean,注解,class
From: https://www.cnblogs.com/hasome/p/17921949.html

相关文章

  • Spring连接线程的事务控制
    Spring连接线程的事务控制通过把线程ThreadLocal绑定数据库来连接Connection来控制事务源码实现的方式不够优雅代码实现pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org......
  • Camstar弹出自定义VP
    写在公共类里:  主页面代码如下: 按钮里写代码,或者某方法里写主页面的传递参数定义:  弹出页面如下:   弹出页面代码如下: ......
  • Spring学习记录之Spring的入门程序
    Spring学习记录之Spring的入门程序前言这篇文章是我第二次学习b站老杜的spring相关课程所进行的学习记录,算是对课程内容及笔记的二次整理,以自己的理解方式进行二次记录,其中理解可能存在错误,欢迎且接受各位大佬们的批评指正;关于本笔记,只是我对于相关知识遗忘时快速查阅了解使用......
  • SpringBoot系列---【过滤器Filter和拦截器HandlerInterceptor的区别和用法】
    1.作用时机1.1过滤器过滤器(Filter)主要作用在请求到达Servlet或JSP之前,对请求进行预处理,可以对HTTP请求进行过滤、修改。过滤器是基于回调函数实现的,开发人员通过重写doFilter()方法实现过滤逻辑,其主要功能有:权限验证:检查用户是否已经登录或者是否具有相应的权限。数据压......
  • 解决分层打包后,报Could not find or load main class org.springframework.boot.loade
    解决分层打包后,报Couldnotfindorloadmainclassorg.springframework.boot.loader.JarLauncher错误发现问题升级到springboot3.2后,之前的分层打包启动后会报一下错误Error:Couldnotfindorloadmainclassorg.springframework.boot.loader.JarLauncherCausedby:......
  • Spring基于注解的CRUD
    目录Spring基于注解的CRUD代码实现测试方式一:使用Junit方式测试方式二:使用@RunWith(SpringJUnit4ClassRunner.class)注解测试Spring基于注解的CRUD源码代码实现pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"......
  • Spring基于xml的CRUD
    目录基于xml的CRUD代码实现测试基于xml的CRUD源码使用C3P0连接池使用dbutils包中的QueryRunner类来对数据库进行操作代码实现pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://ww......
  • Spring MVC 源码分析 - HandlerMapping 组件(二)之 HandlerInterceptor 拦截器
    HandlerMapping组件HandlerMapping组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是Object类型,可以将其理解成HandlerMethod对象(例如我们使用最多的 @RequestMapping 注解所标......
  • 【Java】Spring、SpringBoot、SpringCloud理解和入门
    关于Spring、SpringBoot、SpringCloud我总结了几点。Spring是轻量级的容器框架,目前大多数项目不直接使用Spring的。SpringBoot是Spring的升级版,主要应用单个微服务,关联性小的项目、规模小、硬件要求不高的项目。SpringCloud基于SpringBoot来实现微服务开发组件。主要应用于规......
  • Spring学习记录之Spring概述
    Spring学习记录之Spring概述前言这篇文章是我第二次学习b站老杜的spring相关课程所进行的学习记录,算是对课程内容及笔记的二次整理,以自己的理解方式进行二次记录,其中理解可能存在错误,欢迎且接受各位大佬们的批评指正;关于本笔记,只是我对于相关知识遗忘时快速查阅了解使用,至于课......