1.导入AOP相关坐标
2.创建目标接口和目标类(内部包含切点)
接口:
public interface TargetInterface {
public void print();
}
实现类:
public class TargetInterfaceImpl implements TargetInterface {
public void print() {
System.out.println("输出。。。。");
}
}
3.创建切面类(内部包含切入方法)
public class MyAspect {
public void before(){
System.out.println("前置增强。。。。。。。。。。");
}
public void after(){
System.out.println("后置增强。。。。。。。。。。");
}
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("环绕前增强。。。。");
Object proceed = proceedingJoinPoint.proceed(); //切点方法
System.out.println("环绕后增强。。。。");
return proceed;
}
}
4.将目标类和切面类的对象创建权交给Spring
<!--配置目标对象-->
<bean id="target" class="com.cx.aop.TargetInterfaceImpl"></bean>
<!--配置切面对象-->
<bean id="myAspect" class="com.cx.aop.MyAspect"></bean>
5.在相关的XML(applicationContext.xml)文件中配置对应的织入关系
<!--配置织入-->
<aop:config>
<!--声名切面-->
<aop:aspect ref="myAspect">
<!--切面:切点+通知-->
<!--<aop:before method="before" pointcut="execution(public void com.cx.aop.TargetInterfaceImpl.print())"></aop:before>-->
<!--<aop:after method="after" pointcut="execution(public void com.cx.aop.TargetInterfaceImpl.print())"></aop:after>-->
<aop:around method="around" pointcut="execution(* com.cx.aop.*.*(..))"/>
</aop:aspect>
</aop:config>
注:
a.当多个切点表达式相同时,可以进行抽取
<aop:pointcut id="myPointcut" expression="execution(* com.cx.aop.*.*(..))"></aop:pointcut>
<aop:before method="before" pointcut-ref="myPointcut"></aop:before>
<aop:after method="after" pointcut-ref="myPointcut"></aop:after>
b.常用的通知类型及配置语法: