目录

一:定义自定义注解

二:使用自定义注解

3.1 定义使用注解的测试文件路径

3.2继承BeanPostProcessor增加spring扫描配置

四:测试



目录结构:

一:定义自定义注解

package com.gyrx.lifecycle.task2.config;import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Indexed;import java.lang.annotation.*;@Target({ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Jindalong {String value() default "自定义注解";}

二:使用自定义注解

3.1 定义使用注解的测试文件路径

package com.gyrx.lifecycle.task2.bean;import org.springframework.context.annotation.ComponentScan;@ComponentScan(value = {"com.gyrx.lifecycle.task2.bean"})
public class CommScanTest {}

3.2继承BeanPostProcessor增加spring扫描配置

在Bean初始化的过程都会调用BeanPostProcessor接口即Spring中的后置处理器,这个接口是Spring IOC容器给我们提供扩展接口,方便在Spring容器中完成bean实例化,配置以及其他初始化方法前后添加一些自己处理的逻辑。

在bean创建好之后都会调用后置处理器的postProcessAfterInitialization方法,所以可以利用自定义这个方法,达到让spring扫描自定义注解的目的。
可以参考上一篇bean的生命周期,稍后会再次完善

package com.gyrx.lifecycle.task2.bean;import com.gyrx.lifecycle.task2.config.Jindalong;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;@Component
public class AnnotationValidRegistrar implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {Method[] methods = ReflectionUtils.getAllDeclaredMethods(bean.getClass());if (methods != null) {for (Method method : methods) {Jindalong jindalong = AnnotationUtils.findAnnotation(method, Jindalong.class);// processif (jindalong != null) {System.out.println(method.getName());System.out.println(jindalong.value());}}}return bean;}
}

四:测试

判断bean对象是否在bean工厂里面了

package com.gyrx.lifecycle.task2.bean;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class BeanTest {public static void main(String[] args) {//通过能否获取自定义注解bean对象,判断spring是否扫描到AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();annotationConfigApplicationContext.register(CommScanTest.class);annotationConfigApplicationContext.refresh();AnnotationValid userService = (AnnotationValid) annotationConfigApplicationContext.getBean("annotationValid");System.out.println(userService);}
}

结果截图

spring 扫描自定义注解相关推荐

  1. spring扫描自定义注解并进行操作

    今天又个需求,就是根据注解来判断是否接口为对外开放,那么启动spring容器的时候把这些注解修饰的bean name放进缓存当中. /**  * 扫描注解添加服务到缓存以供判断时候为对外开放servi ...

  2. java 扫描自定义注解_利用spring 自定义注解扫描 找出使用自定义注解的类

    我们常常有扫描项目里带有指定注解的class, 下面是利用spring扫描自定义注解的方法, 还是比较灵活的 我这里将扫描到的class放到map, 你可以放到其他地方,以便后期使用 import l ...

  3. java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用

    Spring 与自定义注解.外部配置化的结合使用 一.Java注解的简单介绍 注解,也叫Annotation.标注,是 Java 5 带来的新特性. 可使用范围 类.字段.方法.参数.构造函数.包等, ...

  4. spring AOP自定义注解方式实现日志管理

    转:spring AOP自定义注解方式实现日志管理 今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接 ...

  5. spring使用自定义注解_用Spring组成自定义注释

    spring使用自定义注解 Java批注在2004年随Java 5一起引入,是一种将元数据添加到Java源代码中的方法. 如今,许多主要框架(如Spring或Hibernate)都严重依赖注释. 在本 ...

  6. spring中自定义注解(annotation)与AOP中获取注解___使用aspectj的@Around注解实现用户操作和操作结果日志

    spring中自定义注解(annotation)与AOP中获取注解 一.自定义注解(annotation) 自定义注解的作用:在反射中获取注解,以取得注解修饰的类.方法或属性的相关解释. packag ...

  7. spring aop 自定义注解配合swagger注解保存操作日志到mysql数据库含(源码)

    spring aop 自定义注解保存操作日志到mysql数据库 一.思路 二.自定义注解 三.编写操作日志 四.编写操作日志切面\增强 五.使用 六.`注意` 一.思路 利用spring aop 对方 ...

  8. Java之——Spring AOP自定义注解实现日志管理

    转载请注明出处:https://blog.csdn.net/l1028386804/article/details/80295737 1.定义日志类SystemLog package io.mykit ...

  9. 正确实现用spring扫描自定义的annotation

    背景 在使用spring时,有时候有会有一些自定义annotation的需求,比如一些Listener的回调函数. 比如: @Service public class MyService {@MyLi ...

最新文章

  1. c++ 不允许使用抽象类类型的对象_Java中日期API的使用总结
  2. 【竞赛】智能算法赛:智慧海洋建设Top1方案代码
  3. php程序包括什么,php程序是什么
  4. SQL语句大全-珍藏首选
  5. Linux:init0和shutdown -h哪个用来关机比较安全【转载】
  6. 设计素材画面太平淡?优秀案例网页教你如何用色彩丰富画
  7. 代理服务器ip地址搜索验证软件_代理服务器与ip分类介绍
  8. itextpdf 实现html转pdf中中文及图片base64的解决方法
  9. vs code vue 语法提示不全_Vue造轮子必备*.vue文件源码读取并高亮展示
  10. subversion使用_使用Subversion在SQL数据库中对象更改的修订历史记录
  11. OpenStack Queens 女王新神器 — 卷多重挂载
  12. Linux系统移植 uboot移植 步骤
  13. android游戏妄撮java源码
  14. 局域网内window10和Windows7共享只有USB接口打印机的方法——以sharp2048D为例子
  15. 台式计算机cpu允许温度,台式机cpu温度多少正常 台式电脑工作时温度范围
  16. 【数字图像处理】【Matlab】【实验一】图像处理基本操作
  17. POJ 1565 Skew Binary
  18. 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合
  19. 爱普生Epson WorkForce WF-7725 一体机驱动
  20. 使用腾讯云服务器搭建网站

热门文章

  1. 时间格式yyyyMMddHHmmss的大小写,和字母含义
  2. 【愚公系列】2023年06月 网络安全(交通银行杯)-word弱口令2
  3. 免费数据恢复软件给你,你真的敢用吗?
  4. netsh查看wifi密码
  5. linux 命令 (不断更新)
  6. 2020.10.10--PS--路径运算、路径总结、路径描边和填充
  7. 客户端/服务器模式下,pvpython操作完数据后,paraview客户端未响应
  8. java从身份证号码中提取出生年月日
  9. 第五届“传智杯”全国大学生计算机大赛(练习赛)传智杯 #5 练习赛] 前四题Python解答
  10. 将CorelDRAW文件转成PSD分层文件详解