spring 扫描自定义注解
目录
一:定义自定义注解
二:使用自定义注解
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 扫描自定义注解相关推荐
- spring扫描自定义注解并进行操作
今天又个需求,就是根据注解来判断是否接口为对外开放,那么启动spring容器的时候把这些注解修饰的bean name放进缓存当中. /** * 扫描注解添加服务到缓存以供判断时候为对外开放servi ...
- java 扫描自定义注解_利用spring 自定义注解扫描 找出使用自定义注解的类
我们常常有扫描项目里带有指定注解的class, 下面是利用spring扫描自定义注解的方法, 还是比较灵活的 我这里将扫描到的class放到map, 你可以放到其他地方,以便后期使用 import l ...
- java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用
Spring 与自定义注解.外部配置化的结合使用 一.Java注解的简单介绍 注解,也叫Annotation.标注,是 Java 5 带来的新特性. 可使用范围 类.字段.方法.参数.构造函数.包等, ...
- spring AOP自定义注解方式实现日志管理
转:spring AOP自定义注解方式实现日志管理 今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接 ...
- spring使用自定义注解_用Spring组成自定义注释
spring使用自定义注解 Java批注在2004年随Java 5一起引入,是一种将元数据添加到Java源代码中的方法. 如今,许多主要框架(如Spring或Hibernate)都严重依赖注释. 在本 ...
- spring中自定义注解(annotation)与AOP中获取注解___使用aspectj的@Around注解实现用户操作和操作结果日志
spring中自定义注解(annotation)与AOP中获取注解 一.自定义注解(annotation) 自定义注解的作用:在反射中获取注解,以取得注解修饰的类.方法或属性的相关解释. packag ...
- spring aop 自定义注解配合swagger注解保存操作日志到mysql数据库含(源码)
spring aop 自定义注解保存操作日志到mysql数据库 一.思路 二.自定义注解 三.编写操作日志 四.编写操作日志切面\增强 五.使用 六.`注意` 一.思路 利用spring aop 对方 ...
- Java之——Spring AOP自定义注解实现日志管理
转载请注明出处:https://blog.csdn.net/l1028386804/article/details/80295737 1.定义日志类SystemLog package io.mykit ...
- 正确实现用spring扫描自定义的annotation
背景 在使用spring时,有时候有会有一些自定义annotation的需求,比如一些Listener的回调函数. 比如: @Service public class MyService {@MyLi ...
最新文章
- c++ 不允许使用抽象类类型的对象_Java中日期API的使用总结
- 【竞赛】智能算法赛:智慧海洋建设Top1方案代码
- php程序包括什么,php程序是什么
- SQL语句大全-珍藏首选
- Linux:init0和shutdown -h哪个用来关机比较安全【转载】
- 设计素材画面太平淡?优秀案例网页教你如何用色彩丰富画
- 代理服务器ip地址搜索验证软件_代理服务器与ip分类介绍
- itextpdf 实现html转pdf中中文及图片base64的解决方法
- vs code vue 语法提示不全_Vue造轮子必备*.vue文件源码读取并高亮展示
- subversion使用_使用Subversion在SQL数据库中对象更改的修订历史记录
- OpenStack Queens 女王新神器 — 卷多重挂载
- Linux系统移植 uboot移植 步骤
- android游戏妄撮java源码
- 局域网内window10和Windows7共享只有USB接口打印机的方法——以sharp2048D为例子
- 台式计算机cpu允许温度,台式机cpu温度多少正常 台式电脑工作时温度范围
- 【数字图像处理】【Matlab】【实验一】图像处理基本操作
- POJ 1565 Skew Binary
- 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合
- 爱普生Epson WorkForce WF-7725 一体机驱动
- 使用腾讯云服务器搭建网站
热门文章
- 时间格式yyyyMMddHHmmss的大小写,和字母含义
- 【愚公系列】2023年06月 网络安全(交通银行杯)-word弱口令2
- 免费数据恢复软件给你,你真的敢用吗?
- netsh查看wifi密码
- linux 命令 (不断更新)
- 2020.10.10--PS--路径运算、路径总结、路径描边和填充
- 客户端/服务器模式下,pvpython操作完数据后,paraview客户端未响应
- java从身份证号码中提取出生年月日
- 第五届“传智杯”全国大学生计算机大赛(练习赛)传智杯 #5 练习赛] 前四题Python解答
- 将CorelDRAW文件转成PSD分层文件详解