spring aop自动代理注解配置之二
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring aop自动代理注解配置之二相关的知识,希望对你有一定的参考价值。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <context:component-scan base-package="com.zr.utils"></context:component-scan> <!-- <aop:aspectj-autoproxy ></aop:aspectj-autoproxy> --> <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy> </beans>
package com.zr.utils; import org.springframework.stereotype.Component; @Component("comp") public class Calculate implements Compute{ public int div(int num1,int num2){ System.out.println("除法"); return num1/num2; } }
package com.zr.utils; import java.util.Arrays; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; @Aspect @Component("testAspect") public class TestAspect { @Pointcut("execution(* com.zr.utils.Calculate.*(..))") private void testPointcut(){} //第一个 * 代表任意修饰符及任意返回值,其中 .. 匹配任意数量的参数. @Before("testPointcut()") public void methodBefore(JoinPoint joinpoint){ System.out.println("执行方法:"+joinpoint.getSignature().getName()+"之前"+" 参数:"+Arrays.asList(joinpoint.getArgs())); } //第一个 * 代表public修饰符下任意返回值,第一个 * 代表com.zr.utils.Calculate路径下的任意方法 @After(value="testPointcut()") public void methodAfter(JoinPoint joinpoint) { System.out.println("执行方法:"+joinpoint.getSignature().getName()+"之后"); } //匹配第一个参数为 int 类型的方法, .. 匹配任意数量任意类型的参数 @AfterReturning(pointcut="testPointcut()",returning="result") public void methodAfterRunning(JoinPoint joinpoint,Object result){ System.out.println("返回结果之后执行"+",返回结果:"+result); } //匹配参数类型为 int, int 类型的方法. @AfterThrowing(pointcut="testPointcut()",throwing="exception") public void methodAfterThrowing(JoinPoint joinPoint,Exception exception){ System.out.println("异常通知, 在方法抛出异常之后执行"+",异常日志:"+exception); } }
package com.zr.utils; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestAop { public static void main(String[] args) { ApplicationContext ctc = new ClassPathXmlApplicationContext("context.xml"); /*Calculate calculate = (Calculate) ctc.getBean("comp");*/ Calculate c = (Calculate) ctc.getBean("comp"); int result = c.div(10, 2); } }
以上是关于spring aop自动代理注解配置之二的主要内容,如果未能解决你的问题,请参考以下文章