自定义注解实现

1. 定义注解

注解标志:@interface

常用元注解(定义在注解上的注解)

// 注解的生命周期 RUNTIME > Source > CLASS
@Retention(RetentionPolicy.RUNTIME)
//枚举类:
//TYPE 作用在类 接口上; METHOD 作用在方法上
@Target({ElementType.METHOD})
@Inherited //可以被继承
@Documented // 可以被写入javaDoc中
public @interface JsonVerify {
	// 这里面的属性要加 括号 同时只支持8大数据类型 以及其数组类型 
	// 以及 Class
	String key() default ""; 
}

2. 实现注解的方法

2.1 使用切面

// 在类上定义注解@Aspect
@Aspect
@Component
@Slf4j
public class JsonVerifyAspect {
	// 配置织入点(切点)
	@Pointcut("@annotation(org.springblade.sdm.annotation.JsonVerify)")
	public void verifyPointCut()
	{
	}

// 常用切面@Before 方法前 @After 方法后 @Around 环绕方法
	@Before("verifyPointCut()")
	@SneakyThrows
	public void before(JoinPoint joinPoint){
		log.info("--------校验json---------");
		// 获取注解
		MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
		Method method = methodSignature.getMethod();
		JsonVerify jsonVerify = method.getAnnotation(JsonVerify.class);
		//获取第一个参数
		Object obj = joinPoint.getArgs()[0];
		
		// 如果是环绕Around 则在程序中使用 joinPoint.proceed(); 继续执行被注解的方法
	}
}

注意事项

无法注入的问题

如果在方法上使用注解,要保证该方法并不是被本类中其它方法调用,
否则AOP无法动态代理此类,需要加载本类(WHY? 待定)

// 使用懒加载
@Lazy
@Autowired
CurrentService currentService = THIS;

// 调用
THIS.方法名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值