public class AopBean implements AopBeanInfo{@Overridepublic void test() {System.out.println("spring aop test... ...");}
}
public interface AopBeanInfo {public void test();
}
/****/
public class LogUtils {/*** 前置通知*/public void beforeMethod() {System.out.println("前置通知");}/*** 最终通知*/public void alertMethod(){System.out.println("最终通知");}/*** 环绕通知* @param pjp* @return* @throws Throwable*/public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable{System.out.println("环绕通知-pre");Object proceed = pjp.proceed();System.out.println("环绕通知-after");return proceed;}/*** 异常通知*/public void afterThrowingMethod(){System.out.println("异常通知");}/*** 后置通知*/public void afterReturning(){System.out.println("后置通知");}}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd
"><!--循环依赖问题--><bean id="aopBean" class="com.dabing.source.aop.AopBean"></bean><!--aop配置--><!--横切逻辑--><bean id="logUtils" class="com.dabing.source.aop.LogUtils"></bean><aop:config><aop:aspect ref="logUtils"><aop:before method="beforeMethod" pointcut="execution(public void com.dabing.source.aop.AopBean.test())"/><aop:after method="alertMethod" pointcut="execution(public void com.dabing.source.aop.AopBean.test())"/><aop:around method="aroundMethod" pointcut="execution(public void com.dabing.source.aop.AopBean.test())"/><aop:after-returning method="afterReturning" pointcut="execution(public void com.dabing.source.aop.AopBean.test())"/><aop:after-throwing method="afterThrowingMethod" pointcut="execution(public void com.dabing.source.aop.AopBean.test())"/></aop:aspect></aop:config></beans>
/*** 测试aop*/@Testpublic void testAop(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext-aop.xml");AopBeanInfo aopBean = applicationContext.getBean(AopBeanInfo.class);aopBean.test();}
设置断点条件
放行
python源码剖析第二版、
java中如何将源码打包。
网站维护中源码。
网站正在建设中源码?
此处进行了递归调用:在proceed方法中继续调用proceed方法
如何将指标的源码导入炒股软件中?
在前置通知对象中,先执行前置逻辑,在进行后续递归操作
执行前置逻辑
继续进行后续递归操作
在最终通知对象中,先执行递归操作,在进行后续后置逻辑执行
@SpringBootApplication,先执行递归操作
继续递归调用
Java aop、
目标方法执行完毕后
一直往下执行
(执行方法略),直接展示回到环绕通知
一直往下执行
(执行方法略),直接展示回到最终通知
Spring AOP,
一直往下执行invoke方法(执行方法略),直接展示执行具体最终通知方法
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态