Spring AOP 的基本应用编程过程。
1.在XML中创建切面(Aspect)
<bean id="aspectBiz" class="Aophili.AspectBiz"></bean>
<bean id="moccAspect" class="Aopshili.MoccAspect"></bean>
<!-- 创建切面 -->
<aop:config>
<aop:aspect id="aspect-mocc" ref="moccAspect"></aop:aspect>
</aop:config>
2.在XML中创建切入点
<!-- 创建切入点 在 Aopshili.AspectBiz类下 所有方法名包含biz的方法 -->
<aop:pointcut expression="execution(* Aopshili.AspectBiz.*biz*())" id="pointcutbiz"/>
3.在XML中创建创建相应的通知
<!-- 创建前置通知 -->
<aop:before method="before" pointcut-ref="pointcutbiz"/>
<!-- 创建返回后通知 -->
<aop:after-returning method="afterreturn" pointcut-ref="pointcutbiz"/>
<!-- 抛出异常后通知 -->
<aop:after-throwing method="afterthrowing" pointcut-ref="pointcutbiz"/>
<!-- 后通知 -->
<aop:after method="afte" pointcut-ref="pointcutbiz" />
4.创建相应的Java类
AspectBiz.java
package Aopshili;
public class AspectBiz {
public void setbizs(){
System.out.println("!ni hao !");
}
}
MoccAspect.java
package Aopshili;
public class MoccAspect {
public void before(){
System.out.println("before");
}
public void afterreturn(){
System.out.println("afterreturn");
}
public void afterthrowing(){
System.out.println("afterreturn");
}
public void afte(){
System.out.println("afterreturn");
}
}
测试类代码
@Test
public void testSetter(){
AspectBiz biz=super.getBean("aspectBiz");
biz.setbizs();
}
完整XML代码
<?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: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/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<bean id="aspectBiz" class="Aopshili.AspectBiz"></bean>
<bean id="moccAspect" class="Aopshili.MoccAspect"></bean>
<aop:config>
<!-- 创建切面 -->
<aop:aspect id="aspectmocc" ref="moccAspect">
<!-- 创建切入点 在 Aopshili.AspectBiz类下 所有方法名包含biz的方法 execution(*Aopshili.AspectBiz.*biz*()) -->
<aop:pointcut expression="execution(* Aopshili.AspectBiz.*biz*())" id="pointcutbiz"/>
<!-- 创建前置通知 -->
<aop:before method="before" pointcut-ref="pointcutbiz"/>
<!-- 创建返回后通知 -->
<aop:after-returning method="afterreturn" pointcut-ref="pointcutbiz"/>
<!-- 抛出异常后通知 -->
<aop:after-throwing method="afterthrowing" pointcut-ref="pointcutbiz"/>
<!-- 后通知 -->
<aop:after method="afte" pointcut-ref="pointcutbiz" />
</aop:aspect>
</aop:config>
</beans>