首先配置好切面代码 打印日志

package com.rfca.aop;import com.fasterxml.jackson.databind.ObjectMapper;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;@Component
@Aspect
@Lazy(false)
public class Logaop {private Logger logger = LoggerFactory.getLogger(Logaop.class);// private final static String intfName = "Activity/starFireOrderDetailSyn";/*** 定义切入点:对要拦截的方法进行定义与限制,如包、类** 1、execution(public * *(..)) 任意的公共方法* 2、execution(* set*(..)) 以set开头的所有的方法* 3、execution(* com.lingyejun.annotation.LoggerApply.*(..))com.lingyejun.annotation.LoggerApply这个类里的所有的方法* 4、execution(* com.lingyejun.annotation.*.*(..))com.lingyejun.annotation包下的所有的类的所有的方法* 5、execution(* com.lingyejun.annotation..*.*(..))com.lingyejun.annotation包及子包下所有的类的所有的方法* 6、execution(* com.lingyejun.annotation..*.*(String,?,Long)) com.lingyejun.annotation包及子包下所有的类的有三个参数,第一个参数为String类型,第二个参数为任意类型,第三个参数为Long类型的方法* 7、execution(@annotation(com.lingyejun.annotation.Lingyejun))*/@Pointcut("execution(* com.rfca.newcontroller..*.*(..))")private void cutMethod() {}/*** 后置通知:在目标方法执行后调用,若目标方法出现异常,则不执行  后置通知完成计件*/@Around("cutMethod()")public Object myLogger(ProceedingJoinPoint pjp) throws Throwable {long l = System.currentTimeMillis();//使用ServletRequestAttributes请求上下文获取方法更多ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();String className = pjp.getSignature().getDeclaringTypeName();String methodName = pjp.getSignature().getName();//使用数组来获取参数Object[] array = pjp.getArgs();ObjectMapper mapper = new ObjectMapper();//执行函数前打印日志logger.info("调用前:{}:{},传递的参数为:{}", className, methodName, mapper.writeValueAsString(array));logger.info("URL:{}", request.getRequestURL().toString());logger.info("IP地址:{}", request.getRemoteAddr());//调用整个目标函数执行Object obj = pjp.proceed();//执行函数后打印日志logger.info("调用后:{}:{},返回值为:{}", className, methodName, mapper.writeValueAsString(obj));logger.info("耗时:{}ms", System.currentTimeMillis() - l);return obj;}}

重点
需要在扫描controller的那个xml中配置 <aop:aspectj-autoproxy proxy-target-class=“true”/> 有时候配置到applicationContext.xml中是不生效的,
因为 切面类和 被代理的类都要由spring 或者springMVC管理
只有 Spring 生成的对象才有 AOP 功能,因为 Spring 生成的代理对象才有 AOP 功能。
切入的类和被切入的类必须是被spring管理的(springIOC),如果是自己new 出来的,切入无效。

而且所对应的切入方法不能是static 修饰的
可能是springmvc的bug吧。你把
aop:aspectj-autoproxy/
放到DispatcherServlet所对应的**-servlet.xml配置文件中,就可以了。

项目配置如下就可以生效了

结果

spring之AOP切面不生效!!!!!原因在这相关推荐

  1. Spring MVC AOP切面失效原因与处理

    Spring MVC AOP切面失效原因与处理 问题概述 AOP的两类实现 解决方案 方法一:用Autowired 注入自身的实例 方法二:从Spring上下文获取增强后的实例引用 方法三: 利用Ao ...

  2. spring同类调用事务不生效-原因及三种解决方式

    spring提供的声明式事务注解@Transactional,极大的方便了开发者管理事务,无需手动编写开启.提交.回滚事务的代码. 但是也带来了一些隐患,如果注解使用不当,可能导致事务不生效,最终导致 ...

  3. 【Spring】注解(AOP)不生效原因分析以及解决方案

    一 问题 我们在使用spring的注解时,稍不注意就很有可能会遇到注解没有生效的情况,比如下面这段代码,在发生类内调用时就出现了问题, import org.springframework.stere ...

  4. Spring中AOP切面编程学习笔记

    注解方式实现aop我们主要分为如下几个步骤: 1.在切面类(为切点服务的类)前用@Aspect注释修饰,声明为一个切面类. 2.用@Pointcut注释声明一个切点,目的是为了告诉切面,谁是它的服务对 ...

  5. [原创]java WEB学习笔记107:Spring学习---AOP切面的优先级,重用切点表达式

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Spring自定义AOP切面

    切面 切面需要实现PointcutAdvisor接口,包含切点和通知. package com.morris.spring.aop;import org.aopalliance.aop.Advice; ...

  7. Spring的AOP切面编程

    语言苍白无力,我们直接代码说话 package com.example.demo.aspect; import org.springframework.stereotype.Component; @C ...

  8. Java手写Spring的AOP(切面织入)小Demo--盲僧代理击飞 亚索接大实例

    在学习Spring的过程中总会很迷茫,打个@Aspect注解切面功能就有了,只要脱离了框架感觉自己还是什么都没会,所以自己猜了一下切面的思路,大概写了个小Demo,欢迎交流. 涉及知识:JDK动态代理 ...

  9. Spring的AOP实现

    Spring的AOP切面,通过代理的方式来实现切面 静态代理:是使用AspectJ:即在编译阶段生成AOP代理类,也成为编译时增强. 动态代理:使用Spring AOP. 1.使用AspectJ的编译 ...

最新文章

  1. webClient 利用代理连接Rss资源
  2. tensorfllow MNIST机器学习入门
  3. 新一代(New Generation)测试框架TestNG
  4. 《从零开始学Swift》学习笔记(Day 6)——哎呀常量和变量都该什么时候用啊?...
  5. 不想工作就想创业?我劝你看完这档综艺再决定
  6. python ljust 库_Python知识精解:str ljust()方法
  7. 非整数倍数数据位宽转换8to12
  8. 算法移植优化(四)c++11 多线程
  9. Oracle传统基本体系结构初步介绍(2)
  10. 请谨慎设置WinForm控件DataGridView列的AutoSizeMode属性
  11. Wpf ScrollBar自定义样式
  12. OpenProj打开不了或者提示”Failed to load Java VM Library”的错误的解决方案
  13. 2020年高效搬砖必备的IDEA插件(附安装包)
  14. gyb优化事项(2)
  15. 2016年计划,2015年总结
  16. DBeaver 环境配置
  17. KVM虚拟化,超详细
  18. 视频教程-spring cloud与spring boot实战视频教程-Java
  19. SMETA验厂辅导,SEDEX(Smeta)验厂系统介绍及验厂结果查询
  20. 天道酬勤系列之C++ 常量介绍

热门文章

  1. PXE系列之一:PXE环境搭建
  2. linux xxd命令
  3. MySQL:索引原理
  4. 机器学习 数据挖掘 统计学 深度学习
  5. nodejs+vue 智慧餐厅点餐餐桌预订系统
  6. vscode运行cpp文件:检测到 #include 错误。请更新 includePath。已为此翻译单元(E:\C++ Code\test1\test1\test1.cpp)禁用波形曲线。
  7. 输入你的密码来连接到_查看电脑已连接的WIFI密码
  8. 基于SSM技术的医院在线预约诊疗系统设计与实现 毕业设计-附源码011130
  9. mybatis-plus使用this.saveBatch报java.lang.NullPointer空指针异常
  10. 定义一个名为Cylinder类表示圆柱,它继承Circle类