Spring aop切面编程实现log日志步骤

1、在spring-mvc.xml配置文件中打开切面开关:

<aop:aspectj-autoproxy proxy-target-class="true"/>

注意:proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作用(这时需要cglib库)。如果proxy-target-class属值被设置为false或者这个属性被省略,那么标准的JDK 基于接口的代理将起作用。即使你未声明 proxy-target-class="true" ,但运行类没有继承接口,spring也会自动使用CGLIB代理。高版本spring自动根据运行类选择 JDK 或 CGLIB 代理。

2、定义拦截哪些操作类型:比如增加、修改、删除

     

3、定义拦截操作的切面实现类:

     

说明:

1.@aspect:表明是切面类

2.@Pointcut(value = "execution (* com.cms.admin.web.controller.*.*(..))"):定义统一拦截的切入点,其中第一个*表示任意返回类型,第二个*表示任意类名,假如第二个*前面是两个.则表示包括包里面的子包,第三个*表示任意方法名,后面的小括号表示任意参数值

3.//@Before("controllerAspect()"):表示拦截方法执行前的动作

4.@Around("controllerAspect()"):表示方法执行前后的动作,注意要有返回值

    

5.@AfterReturning(value = "controllerAspect()", returning = "rtv",argNames="rtv"):表示拦截方法执行完成之后的动作,pointcut/value:这两个属性的作用是一样的,它们都属于指定切入点对应的切入表达式。一样既可以是已有的切入点,也可直接定义切入点表达式。当指定了pointcut属性值后,value属性值将会被覆盖。returning:该属性指定一个形参名,用于表示Advice方法中可定义与此同名的形参,该形参可用于访问目标方法的返回值。除此之外,在Advice方法中定义该形参(代表目标方法的返回值)时指定的类型,会限制目标方法必须返回指定类型的值或没有返回值。注意:虽然AfterReturning增强处理可以访问到方法的返回值,但它不可以改变目标方法的返回值

   

6.@AfterThrowing("controllerAspect() && args(ex)"):表示捕捉方法执行异常的动作,加上args(ex)  中间是AfterThrowing方法参数的名字。

    


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring AOP (Aspect-Oriented Programming) 的四个主要切面通常包括:通知(Advice)、切入点(Pointcut)、连接点(Join Point)和切面(Aspect)。下面是它们的简要介绍: 1. **通知(Advice)** - 是AOP的核心,它是定义在切面中的行为,可以是前置通知(Before)、后置通知(After)、返回通知(After Returning)或异常通知(AfterThrowing)。通知可以在特定的连接点执行,如方法调用前后。 ```java @Before("execution(* com.example.service.*(..))") // 前置通知 public void beforeAdvice(JoinPoint joinPoint) { // 业务逻辑... } ``` 2. **切入点(Pointcut)** - 定义了通知应该何时执行,它描述了一个或者一组方法签名。Spring AOP使用Spring Expression Language (SpEL) 来编写表达式来匹配方法或类型。 3. **连接点(Join Point)** - 是AOP的核心概念,它是指程序执行过程中的一个特定时刻,比如方法调用、构造函数调用等。通知就是在这些连接点上插入的。 4. **切面(Aspect)** - 是一个模块化的、可重用的代码单元,它包含了一组相关的通知。切面由一个或多个通知组成,它们共享相同的切入点。 例如,一个简单的切面可能如下定义: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*(..))") public void logBefore(JoinPoint joinPoint) { // 打印日志... } // 其他通知... } ``` 这里,`LoggingAspect`是一个切面,它定义了一个`logBefore`前置通知,会在`com.example.service`包下的所有方法执行之前被调用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值