springAop的配置注解方式实现

前面一篇是xml实现的,现在用注解方式实现一下,测试类还是原来的,xml的配置中多余的部分这里就不在贴出来了。

applicationContext.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd">

    <context:component-scan base-package="annotationAop"></context:component-scan>
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    <bean id="testBean" class="controller.logController"></bean>

</beans>

上一篇漏了测试用的controller类这里补上

package controller;

public class logController {

    public void firsttest1(){
        System.out.println("第一个test1执行中");
    }

    public void secondtest1(){
        System.out.println("第二个test1执行中");
    }

    public void throwtest1() throws Exception {
        System.out.println("要抛异常了");
        throw new  Exception("测试异常");
    }

    public void aroundtest1(){
        System.out.println("环绕方法测试");
    }

    public String returntest1(){
        return "返回值测试";
    }

    public void firsttest2(){
        System.out.println("第一个test2执行中");
    }

    public void secondtest2(){
        System.out.println("第二个test2执行中");
    }

}

注解切面类

package annotationAop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class AspectClass {

    @Pointcut("execution(void controller.*.*test1(..))")
    public void pointCut(){

    }

    @Before(value = "pointCut()")
    public void before(){
        System.out.println("注解测试方法执行前");
    }

    @After(value = "pointCut()")
    public void after(){
        System.out.println("注解测试方法执行后");
    }

    @AfterReturning(value = "pointCut()")
    public void returnMehtod(){
        System.out.println("注解测试方法返回后执行");
    }

    @AfterThrowing(value = "pointCut()")
    public void throwMethod(){
        System.out.println("注解测试方法异常尝试后执行");
    }

    @Around(value = "pointCut()")
    public void aroundMethod(ProceedingJoinPoint joinPoint){

        System.out.println("注解测试方法环绕方法执行前");
        try{
            joinPoint.proceed();
            System.out.println("注解测试方法环绕方法执行后");
        }catch(Throwable throwable){
            throwable.printStackTrace();
        }
    }

}

测试类(和上一篇一样)

public class App 
{
    public static void main( String[] args ) throws Exception {

        //加载spring配置文件
        AbstractApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取测试用bean
        logController test = (logController)context.getBean("testBean");
        //会被拦截的方法
        test.firsttest1();
        System.out.println("----------------------");
        test.secondtest1();
        System.out.println("----------------------");
        test.aroundtest1();
        System.out.println("----------------------");
        test.returntest1();
        System.out.println("----------------------");
        test.throwtest1();
        System.out.println("----------------------");


        //不会被拦截的方法
        test.firsttest2();
        System.out.println("----------------------");
        test.secondtest2();
    }

测试结果

注解测试方法环绕方法执行前
注解测试方法执行前
第一个test1执行中
注解测试方法环绕方法执行后
注解测试方法执行后
注解测试方法返回后执行
----------------------
注解测试方法环绕方法执行前
注解测试方法执行前
第二个test1执行中
注解测试方法环绕方法执行后
注解测试方法执行后
注解测试方法返回后执行
----------------------
注解测试方法环绕方法执行前
注解测试方法执行前
环绕方法测试
注解测试方法环绕方法执行后
注解测试方法执行后
注解测试方法返回后执行
----------------------
----------------------
注解测试方法环绕方法执行前
注解测试方法执行前
要抛异常了
注解测试方法执行后
注解测试方法返回后执行
----------------------
第一个test2执行中
----------------------
第二个test2执行中
java.lang.Exception: 测试异常
 at controller.logController.throwtest1(logController.java:15)
 at controller.logController$$FastClassBySpringCGLIB$$7d45bb2e.invoke(<generated>)
 at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
 at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
 at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
 at annotationAop.AspectClass.aroundMethod(AspectClass.java:41)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629)
 at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618)
 at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:47)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 at org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:52)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
 at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)
 at controller.logController$$EnhancerBySpringCGLIB$$dfb6add3.throwtest1(<generated>)
 at logbackmvn.App.main(App.java:28)



猜你喜欢

转载自blog.csdn.net/qq_16765879/article/details/80610651