2.基于AOP自定义注解Annotation的实现
上一篇中分析了AOP的实现原理,
总结为:
- 判断对象是否需要被代理?@Aspect注解的实现是根据切入点表达式
- 代理之后需要做什么,就是那些通知,本质上是实现了MethodInterceptor的拦截器
- 如何让一个自定义的通知器生效?就是注入一个实现Advisor的bean
我们在使用@Aspect时通常都是使用表达式,基本上都是基于package级别的切,如果我们只想切某些较为分散的方法,这个时候配置表达式的话可能就不太方便啦,那么可以通过自定义注解,在需要的方法上加上这个注解就ok了
根据这些信息,我们可以自己仿写一个类@Aspect的功能
1.注入一个通知器,基于表达式的
@Component
public class MethodCustomAdvisor extends AbstractPointcutAdvisor { @Override
public Pointcut getPointcut() {
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
//定义切入点表达式
pointcut.setExpression("切入点表达式");
//基于method级别的注解
// AnnotationMatchingPointcut.forMethodAnnotation(MethodCustomAnnotation.class);
//基于class级别的注解
// AnnotationMatchingPointcut.forClassAnnotation(ClazzCustomAnnotation.class);
return pointcut;
}
//绑定某个通知
@Override
public Advice getAdvice() {
return new MethodCustomInterceptor();
}
}
2. 定义一个拦截器(通知),表明这个通知要做什么,这样完全就可以啦
@Slf4j
public class MethodCustomInterceptor implements MethodInterceptor, Serializable { private Map<Method, Boolean> map = new ConcurrentHashMap<>(); @Override
public Object invoke(MethodInvocation invocation) throws Throwable {
log.error("ff========");
//譬如记录日志等等...... return invocation.proceed();
}
}
3.基于注解的实现
基于注解的话,完全就是将上面的表达式的判断部分改为注解的相关判断就可以啦,aop本身提供了方法级别和类级别的注解判断,只要自己定义一个注解写上去就OK啦
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface MethodCustomAnnotation { String name() default "name"; String value(); }
2.基于AOP自定义注解Annotation的实现的更多相关文章
- 利用Spring AOP自定义注解解决日志和签名校验
		转载:http://www.cnblogs.com/shipengzhi/articles/2716004.html 一.需解决的问题 部分API有签名参数(signature),Passport首先 ... 
- ssm+redis整合(通过aop自定义注解方式)
		此方案借助aop自定义注解来创建redis缓存机制. 1.创建自定义注解类 package com.tp.soft.common.util; import java.lang.annotation.E ... 
- spring AOP自定义注解方式实现日志管理
		今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ... 
- spring AOP自定义注解 实现日志管理
		今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ... 
- (转)利用Spring AOP自定义注解解决日志和签名校验
		一.需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法. 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如: ... 
- SpringBoot系列(十三)统一日志处理,logback+slf4j AOP+自定义注解,走起!
		往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)we ... 
- redis分布式锁-spring boot aop+自定义注解实现分布式锁
		接这这一篇redis分布式锁-java实现末尾,实现aop+自定义注解 实现分布式锁 1.为什么需要 声明式的分布式锁 编程式分布式锁每次实现都要单独实现,但业务量大功能复杂时,使用编程式分布式锁无疑 ... 
- 使用AOP+自定义注解完成spring boot的接口权限校验
		记使用AOP+自定义注解完成接口的权限校验,代码如下: pom文件添加所需依赖: 1 <dependency> 2 <groupId>org.aspectj</group ... 
- AOP自定义注解鉴权
		刚出来工作那会或者在学校的时候,经常听到说AOP(面向对象编程,熟称切面)的用途是日志.鉴权等.但是那会不会,后面学会了,又没有写博客记录,今天写给大伙,希望能帮到大家 一.学习目标:利用AOP+自定 ... 
随机推荐
- Outline 科学的上网
			outline 官网:https://getoutline.org/zh-CN/home 下载 Outline 管理器 下载 Outline 客户端 配置浏览器代理 
- JPA中的主键生成策略
			通过annotation(注解)来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的@id和@Gen ... 
- 安装CDH5.11.2集群
			master 192.168.1.30 saver1 192.168.1.40 saver2 192.168.1.50 首先,时间同步 然后,ssh互通 接下来开始: 1.安装MySQL5.6. ... 
- java 日期。时间
			友情链接: https://www.cnblogs.com/wanson/articles/10818955.html 
- apache thinkphp5 强制https://访问
			根目录下,.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On ... 
- Win10系统Edge浏览器怎么截取网页长图?
			有时我们在工作演示时会需要截取网页上的图片,不过简单的截图可以,但如果需要截取超过屏幕大小的整个网页,你是不是就有些束手无策了.虽然拼接图片也是种方法,但毕竟还是不方便,下面好系统重装助手就教你在Wi ... 
- RocketMQ顺序消息
			rocketmq的顺序消息需要满足2点: 1.Producer端保证发送消息有序,且发送到同一个队列.2.consumer端保证消费同一个队列. 生产端: RocketMQ可以严格的保证消息有序.但这 ... 
- 2019 ICPC 南昌网络赛I:Yukino With Subinterval(CDQ分治)
			Yukino With Subinterval Yukino has an array a_1, a_2 \cdots a_na1,a2⋯*a**n*. As a tsundere girl, Yuk ... 
- 算法9-----输出全排列(递归)---移除K个数,剩下最小数。
			1.题目:给定一个字符串,输出所有的字典序. 如: 输入字符串:'ac',输出:['ac','ca'] 输入字符串:‘abc' ,输出:['abc','acb','bac','bca','cab',' ... 
- MySQL No Install zip安装方法
			解压 解压安装包到一个目录,比如:D:\Database\mysql-5.1.55 配置 创建配置文件 创建一个my.ini文件,MYSQL目录下有几个my开头的ini文件,是针对不同配置使用,具体可 ... 
