以上包并不都是必须的
1.写一个切点,也就是被拦截的方法
/**
* 作为切点
* @author BarryLee
* @2018年11月13日@下午11:43:12
*/
public class Demo {
public void testAround() {
System.out.println("testAround");
}
}
2.环绕通知类,执行testAround的时候就会执行这个invoke,invocation.proceed抛出异常
/**
* 环绕通知
* @author BarryLee
* @2018年11月13日@下午11:43:20
*/
public class MyAround implements MethodInterceptor{
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("前置 .. ");
Object returnVal = invocation.proceed();//放行
System.out.println("后置 .. ");
return returnVal;
}
}
3.applicationContext配置
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd ">
<bean class="cn.bl.testAOP1.MyAround" id="myAround"></bean>
<bean class="cn.bl.testAOP1.Demo" id="demo1"></bean>
<!-- 切面 -->
<aop:config>
<!-- 切点,拦截了testAround()方法 -->
<aop:pointcut expression="execution(* cn.bl.testAOP1.Demo.testAround())" id="mypoint"/>
<!-- 通知 -->
<aop:advisor advice-ref="myAround" pointcut-ref="mypoint"/>
</aop:config>
</beans>
4.测试
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext context = new ClassPathXmlApplicationContext("cn/bl/testAOP1/applicationContext.xml");
Demo demo = context.getBean("demo1",Demo.class);
demo.testAround();
/*
前置 ..
testAround
后置 ..
*/
}