1、问题需求
通常在业务开发时,我们可能会用到自定义注解(自定义注解的使用和解析,本章暂不介绍)。在使用自定义注解后,我们需要获取使用了该注解的所有类,然后做一个验证。那么、问题来了,我们如何获取被某注解标注的所有类呢?请欣赏下文:
2、具体实现
2.1、定义两个注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface RespMegTypeSup {
public String value() default "未知错误";
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@RespMegTypeSup
public @interface RespMegType{
public String value() default "未知错误";
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@RespMegTypeSup
public @interface RespMegType22 {
public String value() default "未知错误";
}
2.2、首先我们定义自己的注解扫描器
我们定义一个配置类,在其中postProcessBeanDefinitionRegistry,将我们自定义的注解添加到bean定义扫描器中。
/**
* desc:
* author: Administrator
* date: 2020/11/4
*/
@Configuration
public class DefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(beanDefinitionRegistry);
scanner.setBeanNameGenerator(new AnnotationBeanNameGenerator());
// 定义需要扫描的注解 -- 自定义注解
scanner.addIncludeFilter(new AnnotationTypeFilter(RespMegTypeSup.class));
// 定义扫描的包
scanner.scan("com.xblog");
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
}
}
2.3、获取Spring的ApplicationContent 上下问对象。
@Resource
private ApplicationContext applicationContext;
2.4、获取所有指定注解的类的bean信息
Map<String, Object> beansWithAnnotationMap = this.applicationContext.getBeansWithAnnotation(RespMegTypeSup.class);
至此、具体功能实现完毕。
如果觉得有帮助,麻烦给个赞。有好的实现方式,欢迎评论讨论。谢谢