美文网首页
AOP开发中的一个坑

AOP开发中的一个坑

作者: NisyCoding | 来源:发表于2020-06-16 19:46 被阅读0次

一. 背景:

我们在开发过程中,经常需要在一个业务类中,进行业务方法之间的互相调用.但是在AOP编程中,我们调用的时候需要谨慎.因为在调用的时候,我们是代理对象进行方法的调用的,此时在业务类中,只能调用业务类中的功能,无法调用代理对象中的额外功能.

二.刨坑:

2.1 切入点配置:

此时,我们需要给register()和login()方法都加上日志和事务的功能,我们需要在切面类中,进行切入点的配置,如下:

  //切入点复用:在切面类中定义一个函数,上面@PointCut注解,通过这种方式,定义切入点表达式,后续更加有利于切入点复用
    @Pointcut("execution(* *..UserServiceImpl.*(..))")
    public void pointCut(){}
package com.baizhiedu.aspectj;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

/**
 * 通过切面类定义额外功能,@Around注解,同时也定义了切入点,around当中的参数
 */

/**
 * @Aspect注解:
 * 表示这是一个切面类:额外功能+切入点
 * 作用等同于:实现MethodInterceptor接口,重写invoke方法
 */

/**
 * @Aroud注解:
 * 相当有之前的额外功能,around()等同于invoke()
 */


@Aspect
public class MyAspectJ {

    //切入点复用:在切面类中定义一个函数,上面@PointCut注解,通过这种方式,定义切入点表达式,后续更加有利于切入点复用
    @Pointcut("execution(* *..UserServiceImpl.*(..))")
    public void pointCut(){}


//    @Around("execution(* login(..))")
    @Around(value = "pointCut()")
    public Object arround(ProceedingJoinPoint proceedingJoinPoint){
        try {
            System.out.println("注解额外功能...");
            Object proceed = proceedingJoinPoint.proceed();
            return proceed;
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return null;
    }

//    @Around("execution(* login(..))")
    @Around(value = "pointCut()")
    public Object arround1(ProceedingJoinPoint proceedingJoinPoint){
        try {
            System.out.println("事务...");
            Object proceed = proceedingJoinPoint.proceed();
            return proceed;
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return null;
    }

}

2.2 业务类中,方法间的互相调用

register方法中,调用login方法

package com.baizhiedu.aspectj;


import com.baizhiedu.proxy.User;

/**
 * 原始对象
 */
public class UserServiceImpl implements UserService {


    public void login(String name, int age) {
        System.out.println("UserServiceImpl.login");
    }

    public void register(User user) {
        System.out.println("UserServiceImpl.register");
        //此时,我想通过register()方法中,调用login()方法
        this.login("Nisy",20);
    }
}

2.3 测试:

C:\Tools\jdk1.8\bin\java.exe -javaagent:D:\Browser-DownLoad\ideaIU-2019.3.win\lib\idea_rt.jar=59081:D:\Browser-DownLoad\ideaIU-2019.3.win\bin -Dfile.encoding=UTF-8 -classpath C:\Tools\jdk1.8\jre\lib\charsets.jar;C:\Tools\jdk1.8\jre\lib\deploy.jar;C:\Tools\jdk1.8\jre\lib\ext\access-bridge-64.jar;C:\Tools\jdk1.8\jre\lib\ext\cldrdata.jar;C:\Tools\jdk1.8\jre\lib\ext\dnsns.jar;C:\Tools\jdk1.8\jre\lib\ext\jaccess.jar;C:\Tools\jdk1.8\jre\lib\ext\jfxrt.jar;C:\Tools\jdk1.8\jre\lib\ext\localedata.jar;C:\Tools\jdk1.8\jre\lib\ext\nashorn.jar;C:\Tools\jdk1.8\jre\lib\ext\sunec.jar;C:\Tools\jdk1.8\jre\lib\ext\sunjce_provider.jar;C:\Tools\jdk1.8\jre\lib\ext\sunmscapi.jar;C:\Tools\jdk1.8\jre\lib\ext\sunpkcs11.jar;C:\Tools\jdk1.8\jre\lib\ext\zipfs.jar;C:\Tools\jdk1.8\jre\lib\javaws.jar;C:\Tools\jdk1.8\jre\lib\jce.jar;C:\Tools\jdk1.8\jre\lib\jfr.jar;C:\Tools\jdk1.8\jre\lib\jfxswt.jar;C:\Tools\jdk1.8\jre\lib\jsse.jar;C:\Tools\jdk1.8\jre\lib\management-agent.jar;C:\Tools\jdk1.8\jre\lib\plugin.jar;C:\Tools\jdk1.8\jre\lib\resources.jar;C:\Tools\jdk1.8\jre\lib\rt.jar;E:\myproject\spring5.x\target\classes;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-context\5.1.4.RELEASE\spring-context-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-beans\5.1.4.RELEASE\spring-beans-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-core\5.1.4.RELEASE\spring-core-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-jcl\5.1.4.RELEASE\spring-jcl-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-expression\5.1.4.RELEASE\spring-expression-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-webmvc\5.1.14.RELEASE\spring-webmvc-5.1.14.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-web\5.1.14.RELEASE\spring-web-5.1.14.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\slf4j\slf4j-log4j12\1.7.25\slf4j-log4j12-1.7.25.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;D:\WorkTools\apache-maven-3.2.3\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;D:\WorkTools\apache-maven-3.2.3\repository\mysql\mysql-connector-java\5.1.48\mysql-connector-java-5.1.48.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-aop\4.3.27.RELEASE\spring-aop-4.3.27.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\aspectj\aspectjrt\1.9.5\aspectjrt-1.9.5.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\aspectj\aspectjweaver\1.9.5\aspectjweaver-1.9.5.jar com.baizhiedu.aspectj.Test
2020-06-16 19:26:09 DEBUG ClassPathXmlApplicationContext:590 - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6d9c638
2020-06-16 19:26:10 DEBUG XmlBeanDefinitionReader:395 - Loaded 3 bean definitions from class path resource [applicationContext7.xml]
2020-06-16 19:26:10 DEBUG DefaultListableBeanFactory:213 - Creating shared instance of singleton bean 'org.springframework.aop.config.internalAutoProxyCreator'
2020-06-16 19:26:10 DEBUG DefaultListableBeanFactory:213 - Creating shared instance of singleton bean 'userService'
2020-06-16 19:26:10 DEBUG ReflectiveAspectJAdvisorFactory:250 - Found AspectJ method: public java.lang.Object com.baizhiedu.aspectj.MyAspectJ.arround(org.aspectj.lang.ProceedingJoinPoint)
2020-06-16 19:26:10 DEBUG ReflectiveAspectJAdvisorFactory:250 - Found AspectJ method: public java.lang.Object com.baizhiedu.aspectj.MyAspectJ.arround1(org.aspectj.lang.ProceedingJoinPoint)
2020-06-16 19:26:10 DEBUG AnnotationAwareAspectJAutoProxyCreator:521 - Creating implicit proxy for bean 'userService' with 0 common interceptors and 3 specific interceptors
2020-06-16 19:26:10 DEBUG CglibAopProxy:157 - Creating CGLIB proxy: target source is SingletonTargetSource for target object [com.baizhiedu.aspectj.UserServiceImpl@7671cb68]
2020-06-16 19:26:11 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: public void com.baizhiedu.aspectj.UserServiceImpl.register(com.baizhiedu.proxy.User)
2020-06-16 19:26:11 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: public void com.baizhiedu.aspectj.UserServiceImpl.login(java.lang.String,int)
2020-06-16 19:26:11 DEBUG CglibAopProxy:815 - Found 'equals' method: public boolean java.lang.Object.equals(java.lang.Object)
2020-06-16 19:26:11 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: public java.lang.String java.lang.Object.toString()
2020-06-16 19:26:11 DEBUG CglibAopProxy:822 - Found 'hashCode' method: public native int java.lang.Object.hashCode()
2020-06-16 19:26:11 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract int org.springframework.aop.framework.Advised.indexOf(org.springframework.aop.Advisor)
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract int org.springframework.aop.framework.Advised.indexOf(org.aopalliance.aop.Advice)
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isFrozen()
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract java.lang.String org.springframework.aop.framework.Advised.toProxyConfigString()
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract java.lang.Class[] org.springframework.aop.framework.Advised.getProxiedInterfaces()
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isInterfaceProxied(java.lang.Class)
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract org.springframework.aop.Advisor[] org.springframework.aop.framework.Advised.getAdvisors()
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isProxyTargetClass()
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isPreFiltered()
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.replaceAdvisor(org.springframework.aop.Advisor,org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.removeAdvisor(int) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.removeAdvisor(org.springframework.aop.Advisor)
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.removeAdvice(org.aopalliance.aop.Advice)
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvisor(org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvisor(int,org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvice(int,org.aopalliance.aop.Advice) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvice(org.aopalliance.aop.Advice) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isExposeProxy()
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract org.springframework.aop.TargetSource org.springframework.aop.framework.Advised.getTargetSource()
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setPreFiltered(boolean)
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setExposeProxy(boolean)
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setTargetSource(org.springframework.aop.TargetSource)
2020-06-16 19:26:11 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract java.lang.Class org.springframework.aop.TargetClassAware.getTargetClass()
2020-06-16 19:26:11 DEBUG DefaultListableBeanFactory:213 - Creating shared instance of singleton bean 'around'
注解额外功能...
事务...
UserServiceImpl.register
UserServiceImpl.login

Process finished with exit code 0

我们通过测试发现,执行login方法的时候,没有进行注解额外功能+事务的执行,仅仅在register方法中执行了,这是为什么呢?
答案:因为我们是this.login().我们调用的是UserServiceImpl业务类本类中的方法,而register方法,是代理对象调用的.那么问题来了,代理对象怎么调用呢?难道还需要我们创建一个ApplicationContext的spring工厂吗?不需要,因为spring工厂是重量级的资源,我们只需要创建一次就好了.

三.解坑:

spring工厂该怎么获取呢?

3.1 业务类,需要实现ApplicationContextAware接口

ApplicationContextAware接口:
字面意思,ApplicationContext代表了Spring工厂,aware表示知道的意思,整合起来就是,知道了Spring工厂,也就是生成一个Spring工厂.

此时,我们怎么拿到这个spring工厂呢?创建一个成员变量即可;

package com.baizhiedu.aspectj;


import com.baizhiedu.proxy.User;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 原始对象
 */
public class UserServiceImpl implements UserService, ApplicationContextAware {

    private ApplicationContext ctx;

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.ctx=applicationContext;
    }

    public void login(String name, int age) {
        System.out.println("UserServiceImpl.login");
    }

    public void register(User user) {
        System.out.println("UserServiceImpl.register");
        //此时,我想通过register()方法中,调用login()方法
//        this.login("Nisy",20);
        UserService userService = (UserService) this.ctx.getBean("userService");
        userService.login("Nisy",21);
    }

}

3.2 测试:

C:\Tools\jdk1.8\bin\java.exe -javaagent:D:\Browser-DownLoad\ideaIU-2019.3.win\lib\idea_rt.jar=59726:D:\Browser-DownLoad\ideaIU-2019.3.win\bin -Dfile.encoding=UTF-8 -classpath C:\Tools\jdk1.8\jre\lib\charsets.jar;C:\Tools\jdk1.8\jre\lib\deploy.jar;C:\Tools\jdk1.8\jre\lib\ext\access-bridge-64.jar;C:\Tools\jdk1.8\jre\lib\ext\cldrdata.jar;C:\Tools\jdk1.8\jre\lib\ext\dnsns.jar;C:\Tools\jdk1.8\jre\lib\ext\jaccess.jar;C:\Tools\jdk1.8\jre\lib\ext\jfxrt.jar;C:\Tools\jdk1.8\jre\lib\ext\localedata.jar;C:\Tools\jdk1.8\jre\lib\ext\nashorn.jar;C:\Tools\jdk1.8\jre\lib\ext\sunec.jar;C:\Tools\jdk1.8\jre\lib\ext\sunjce_provider.jar;C:\Tools\jdk1.8\jre\lib\ext\sunmscapi.jar;C:\Tools\jdk1.8\jre\lib\ext\sunpkcs11.jar;C:\Tools\jdk1.8\jre\lib\ext\zipfs.jar;C:\Tools\jdk1.8\jre\lib\javaws.jar;C:\Tools\jdk1.8\jre\lib\jce.jar;C:\Tools\jdk1.8\jre\lib\jfr.jar;C:\Tools\jdk1.8\jre\lib\jfxswt.jar;C:\Tools\jdk1.8\jre\lib\jsse.jar;C:\Tools\jdk1.8\jre\lib\management-agent.jar;C:\Tools\jdk1.8\jre\lib\plugin.jar;C:\Tools\jdk1.8\jre\lib\resources.jar;C:\Tools\jdk1.8\jre\lib\rt.jar;E:\myproject\spring5.x\target\classes;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-context\5.1.4.RELEASE\spring-context-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-beans\5.1.4.RELEASE\spring-beans-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-core\5.1.4.RELEASE\spring-core-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-jcl\5.1.4.RELEASE\spring-jcl-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-expression\5.1.4.RELEASE\spring-expression-5.1.4.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-webmvc\5.1.14.RELEASE\spring-webmvc-5.1.14.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-web\5.1.14.RELEASE\spring-web-5.1.14.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\slf4j\slf4j-log4j12\1.7.25\slf4j-log4j12-1.7.25.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;D:\WorkTools\apache-maven-3.2.3\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;D:\WorkTools\apache-maven-3.2.3\repository\mysql\mysql-connector-java\5.1.48\mysql-connector-java-5.1.48.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\springframework\spring-aop\4.3.27.RELEASE\spring-aop-4.3.27.RELEASE.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\aspectj\aspectjrt\1.9.5\aspectjrt-1.9.5.jar;D:\WorkTools\apache-maven-3.2.3\repository\org\aspectj\aspectjweaver\1.9.5\aspectjweaver-1.9.5.jar com.baizhiedu.aspectj.Test
2020-06-16 19:39:39 DEBUG ClassPathXmlApplicationContext:590 - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6d9c638
2020-06-16 19:39:40 DEBUG XmlBeanDefinitionReader:395 - Loaded 3 bean definitions from class path resource [applicationContext7.xml]
2020-06-16 19:39:40 DEBUG DefaultListableBeanFactory:213 - Creating shared instance of singleton bean 'org.springframework.aop.config.internalAutoProxyCreator'
2020-06-16 19:39:40 DEBUG DefaultListableBeanFactory:213 - Creating shared instance of singleton bean 'userService'
2020-06-16 19:39:40 DEBUG ReflectiveAspectJAdvisorFactory:250 - Found AspectJ method: public java.lang.Object com.baizhiedu.aspectj.MyAspectJ.arround(org.aspectj.lang.ProceedingJoinPoint)
2020-06-16 19:39:40 DEBUG ReflectiveAspectJAdvisorFactory:250 - Found AspectJ method: public java.lang.Object com.baizhiedu.aspectj.MyAspectJ.arround1(org.aspectj.lang.ProceedingJoinPoint)
2020-06-16 19:39:41 DEBUG AnnotationAwareAspectJAutoProxyCreator:521 - Creating implicit proxy for bean 'userService' with 0 common interceptors and 3 specific interceptors
2020-06-16 19:39:41 DEBUG CglibAopProxy:157 - Creating CGLIB proxy: target source is SingletonTargetSource for target object [com.baizhiedu.aspectj.UserServiceImpl@7671cb68]
2020-06-16 19:39:41 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: public void com.baizhiedu.aspectj.UserServiceImpl.register(com.baizhiedu.proxy.User)
2020-06-16 19:39:41 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: public void com.baizhiedu.aspectj.UserServiceImpl.setApplicationContext(org.springframework.context.ApplicationContext) throws org.springframework.beans.BeansException
2020-06-16 19:39:41 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: public void com.baizhiedu.aspectj.UserServiceImpl.login(java.lang.String,int)
2020-06-16 19:39:41 DEBUG CglibAopProxy:815 - Found 'equals' method: public boolean java.lang.Object.equals(java.lang.Object)
2020-06-16 19:39:41 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: public java.lang.String java.lang.Object.toString()
2020-06-16 19:39:41 DEBUG CglibAopProxy:822 - Found 'hashCode' method: public native int java.lang.Object.hashCode()
2020-06-16 19:39:41 DEBUG CglibAopProxy:854 - Unable to apply any optimizations to advised method: protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract int org.springframework.aop.framework.Advised.indexOf(org.springframework.aop.Advisor)
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract int org.springframework.aop.framework.Advised.indexOf(org.aopalliance.aop.Advice)
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isFrozen()
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isProxyTargetClass()
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setTargetSource(org.springframework.aop.TargetSource)
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract org.springframework.aop.TargetSource org.springframework.aop.framework.Advised.getTargetSource()
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setPreFiltered(boolean)
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isExposeProxy()
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.setExposeProxy(boolean)
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract org.springframework.aop.Advisor[] org.springframework.aop.framework.Advised.getAdvisors()
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isInterfaceProxied(java.lang.Class)
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract java.lang.Class[] org.springframework.aop.framework.Advised.getProxiedInterfaces()
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract java.lang.String org.springframework.aop.framework.Advised.toProxyConfigString()
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.isPreFiltered()
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.replaceAdvisor(org.springframework.aop.Advisor,org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.removeAdvice(org.aopalliance.aop.Advice)
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvice(int,org.aopalliance.aop.Advice) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvice(org.aopalliance.aop.Advice) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvisor(org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.addAdvisor(int,org.springframework.aop.Advisor) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract void org.springframework.aop.framework.Advised.removeAdvisor(int) throws org.springframework.aop.framework.AopConfigException
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract boolean org.springframework.aop.framework.Advised.removeAdvisor(org.springframework.aop.Advisor)
2020-06-16 19:39:41 DEBUG CglibAopProxy:808 - Method is declared on Advised interface: public abstract java.lang.Class org.springframework.aop.TargetClassAware.getTargetClass()
2020-06-16 19:39:41 DEBUG DefaultListableBeanFactory:213 - Creating shared instance of singleton bean 'around'
注解额外功能...
事务...
UserServiceImpl.register
注解额外功能...
事务...
UserServiceImpl.login

Process finished with exit code 0

相关文章

网友评论

      本文标题:AOP开发中的一个坑

      本文链接:https://www.haomeiwen.com/subject/gworxktx.html