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. ...
随机推荐
- Zookeeper--0200--安装与集群搭建、常用命令、客户端工具
看这里,http://www.cnblogs.com/lihaoyang/p/8358153.html 1,先使用可视化客户端软件 ZooInspector 连接上集群中的一个节点,看下zk的结构: ...
- logstash安装与logstash-input-jdbc插件使用
ElasticSearch的索引可以手动添加索引的,就是类似下面这样添加的 PUT /movies/movie/1 { "title": "The Godfather&q ...
- JavaScript -- Window-窗口坐标
-----029-Window-窗口坐标.html----- <!DOCTYPE html> <html> <head> <meta http-equiv=& ...
- Mac OS X 下搭建thrift环境
1.概述 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生产引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, ...
- linux 初始化工作环境
#!/bin/sh # # init workspace # /bin/svnserve -d -r /home/oracle/projects --listen-port= su - oracle ...
- Apache 源码安装
8.20]# make[root@yahoo pcre-8.20]# make install 二.安装apache1.下载httpd-2.4.3.tar.gz,地址是:http://httpd.ap ...
- vue中使用animate.css
一:使用animate.css的使用 1.安装npm install animate.css --save 2.在main.js中引入import animate from 'animate.css' ...
- 【WePY小程序框架实战三】-组件传值
[WePY小程序框架实战一]-创建项目 [WePY小程序框架实战二]-页面结构 父子组件传值 静态传值 静态传值为父组件向子组件传递常量数据,因此只能传递String字符串类型. 父组件 (paren ...
- 模拟按下某快捷键:keybd_event使用方法
keybd_event是函数功能:该函数合成一次击键事件.系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息. Windows提供了一个模拟键盘API函数Keybd_even ...
- MySql错误处理-错误处理的例子
有几种错误处理的声明形式: § 如果任何错误(不是 NOT FOUND ) , 设置 l_error 为 1 后继续执行: DECLARE CONTINUE HANDLER FOR SQLEXCEPT ...