一. 背景:
我们在开发过程中,经常需要在一个业务类中,进行业务方法之间的互相调用.但是在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
网友评论