aop 拦截含有特定注解的类
1.功能点:使用aop拦截含有自定义注解的类
1.自定义注解
package com.zhuanche.common.dingdingsync; import java.lang.annotation.*; /**
* @Author fanht
* @Description 含有该注解的controller方法存储到mq
* @Date 2019/2/28 上午11:26
* @Version 1.0
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
@Documented
public @interface DingdingAnno {
}
2.使用切面
package com.zhuanche.common.dingdingsync; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import java.lang.reflect.Method;
import java.util.Arrays; /**
* @Author fanht
* @Description
* @Date 2019/2/28 上午11:59
* @Version 1.0
*/
@Component
@Aspect
public class DingdingAspect { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Pointcut("execution(* com.zhuanche.controller.driverteam.DriverTeamController.*(..))")
public void pointCut(){
logger.info("含有自定义注解dingdingAnno的方法...");
} @Before("pointCut() && @annotation(dingdingAnno) ")
public void dingdingVerify(JoinPoint joinPoint,DingdingAnno dingdingAnno){
System.out.println("&&&&&&&&&&&&&&&&&&&&");
logger.info(joinPoint.getSignature().getName() + ",入参:{" + Arrays.asList(joinPoint.getArgs() + "}"));
} @AfterReturning("pointCut() && @annotation(dingdingAnno)")
public void finish(JoinPoint jointPoint,DingdingAnno dingdingAnno){
logger.info(jointPoint.getSignature().getName() + "*********");
Signature signature = jointPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
if (method != null){
dingdingAnno = method.getAnnotation(DingdingAnno.class);
if (dingdingAnno != null){
System.out.println(jointPoint.getTarget().getClass().getName());
System.out.println(jointPoint.getSignature().getName());
System.out.println(jointPoint.getArgs().length);
}
} System.out.println(jointPoint.getSignature().getName());
}
} 3.配置aop
<context:component-scan base-package="com.zhuanche.**"/>
<!--开启aop注解 -->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy> 4.在类上面添加特定注解
@ResponseBody
@RequestMapping(value = "/driverTeamDetail")
@DingdingAnno
public AjaxResponse driverTeamDetail(DriverTeamRequest param){
logger.info("查询车队详情入参:"+ JSON.toJSONString(param));
CarDriverTeamDTO detail = carDriverTeamService.selectOneDriverTeam(param);
return AjaxResponse.success(detail);
} 启动项目,遇到的几个问题:1.使用Jrebel 每次修改后,总是不成功,报各种异常。原因应该是 aop在spring启动时候就加载进去了,修改后需要重启;2.遇到的几个问题:1)启动报错
[Xlint:invalidAbsoluteTypeName]error
原因一般是point后面的地址错误,我的原因是后面多加了&& +自定义注解名称
2)没进入后置通知: 第一次的时候,写的是
@AfterReturning("within(com.zhuanche.controller..*) && @annotation(sdol)")
没有成功,具体原因还不太清楚。
aop 拦截含有特定注解的类的更多相关文章
- 基于注解的Spring AOP拦截含有泛型的DAO
出错场景 1.抽象类BaseDao public abstract class BaseDao<T> { public BaseDao() { entityClass = (Class&l ...
- net core天马行空系列:原生DI+AOP实现spring boot注解式编程
写过spring boot之后,那种无处不在的注解让我非常喜欢,比如属性注入@autowire,配置值注入@value,声明式事物@Transactional等,都非常简洁优雅,那么我就在想,这些在n ...
- [AOP拦截 ]SpringBoot+Quartz Aop拦截Job类中的方法
最近在工作使用boot+quartz整合,开发定时调度平台,遇到需要对Quartz的Job进行异常后将异常记录到日志表的操作,第一反应就想到了使用Spring的AOP,利用AfterThrowin ...
- 从零开始学 Java - Spring AOP 拦截器的基本实现
一个程序猿在梦中解决的 Bug 没有人是不做梦的,在所有梦的排行中,白日梦最令人伤感.不知道身为程序猿的大家,有没有睡了一觉,然后在梦中把睡之前代码中怎么也搞不定的 Bug 给解决的经历?反正我是有过 ...
- 运用Unity实现AOP拦截器
运用Unity实现AOP拦截器[结合异常记录实例] 本篇文章将通过Unity实现Aop异常记录功能:有关Unity依赖注入可以看前两篇文章: 1:运用Unity实现依赖注入[结合简单三层实例] 2:运 ...
- 关于spring的aop拦截的问题 protected方法代理问题
看到一篇很好的Spring aop 拦截方法的问题, 原文地址. 问题 貌似不能拦截私有方法? 试了很多次,都失败了,是不是不行啊? 我想了一下,因为aop底层是代理, jdk是代理接口,私有方法必 ...
- Java - Spring AOP 拦截器的基本实现
一个程序猿在梦中解决的 Bug 没有人是不做梦的,在所有梦的排行中,白日梦最令人伤感.不知道身为程序猿的大家,有没有睡了一觉,然后在梦中把睡之前代码中怎么也搞不定的 Bug 给解决的经历?反正我是有过 ...
- springboot项目:登录 登录aop拦截 使用Redis与cookie 进行设置获取清除操作
登录.登出: 第一步:在pom文件中引入依赖 <dependency> <groupId>org.springframework.boot</groupId> &l ...
- spring拦截器和注解处理日志操作
整体思想:通过拦截器拦截所有的请求,处理含有自定义注解的方法,通过request得到需要的参数. 拦截器代码: package com.zktx.platform.log2; import java. ...
随机推荐
- FactoryMethod工厂方法模式(创建型模式)
1.工厂方法模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只 ...
- Gen对于数组Array的处理
举个例子,如下: public void t() { String[][] a = new String[][] { { "x", "y" } }; Strin ...
- Python模块:日志输出—logging模块
1. logging介绍 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/ ...
- POJ 2607 Fire Station(Floyd打表+枚举更新最优)
题目链接: http://poj.org/problem?id=2607 Description A city is served by a number of fire stations. Some ...
- .NET中OpenFileDialog使用报线程错误的解决方法
昨天,在做一个NPOI读取的小demo的时候,使用OpenFileDialog打开文件,最开始的写法,直接在按钮点击事件中写,会报错,代码如下: OpenFileDialog ofd = new Op ...
- 使用HtmlAgilityPack抓取Ethereum Tokens信息
使用HtmlAgilityPack抓取Ethereum Tokens信息 class Program { static void Main(string[] args) { try { for (in ...
- 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: 1. 在winform中操作ppt,翻页.播放.退出:显示 总页数.当前播放页数 2. 启动播放ppt时录制视 ...
- winform窗体 控件【菜单和工具栏控件】【容器控件】
winform的菜单栏和工具栏 1.ContextMenuStrip -- 右键菜单 可以绑定在任何一个控件上,添加操作快捷键,并可以设置多层 每行相当于一个按钮,输入-可添加 ...
- [日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式
<?php try{ //1. pdo的错误模式,抛出异常,不记录到php的error日志,不影响代码继续运行, $opts=array( PDO::ATTR_ERRMODE => PDO ...
- Arrays工具类的aslist()方法的使用
数组转换成集合: 数组转换成集合不能增加或减少元素,但是可以用集合思想操作数组,也就是说可以使用其他集合中的办法 String[] arr = {"a", "b" ...