开发步骤:
1创建目标接口和目标类(内部有切点)
2创建切面类(内部有增强方法)
3将目标类和切面类的对象创建权交给spring
4在切面类中使用注解配置织入关系
5在配置文件中开启组件扫描和AOP的自动代理
6 测试
下面代码实例:
第一步:创建目标接口和目标类(内部有切点)(由于在前一篇博客讲的很详细这里我们只需要把以前的一些Xml配置变成注解就行)
@Component("target")
public class Target implements TargetInterface {
@Override
public void save() {
System.out.println("save running...");
// int i=1/0;
}
}
第二步:创建切面类(内部有增强方法)
@Component("myAspect")
//切面类
public class MyAspect {
public void before(){
System.out.println("前置增强...");
}
public void afterReturnning(){
System.out.println("后置增强...");
}
public Object around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("环绕前通知...");
//切点方法
Object proceed = pjp.proceed();
System.out.println("环绕后通知...");
return proceed;
}
public void afterThrowing(){
System.out.println("异常抛出增强...");
}
public void after(){
System.out.println("最终增强...");
}
}
第三步:将目标类和切面类的对象创建权交给spring(声明切面)
第四步:在切面类中使用注解配置织入关系(利用注解)
以配置前置通知为例:(记住要加入切点表达式)
第五步:在配置文件中开启组件扫描和AOP的自动代理
<!-- 开启组件扫描-->
<context:component-scan base-package="com.outlier.anno"/>
<!-- aop自动代理-->
<aop:aspectj-autoproxy/>
记住要开启aop的自动代理,它才会识别@Before这样的注解。
第六步:测试
最后,当然如果我们每个通知上面都配上注解,注解里面都会有切点表达式,那么每次书写的时候
我们都会重复写一遍,然后我们也可以像xml文件那样抽取切点表达式
同xml配置 aop一样,我们可以将切点表达式抽取。抽取方式是在切面内定义方法,在该方法上使用@Pointcut注解定义切点表达式,然后在在增强注解中进行引用。具体如下:
使用:
运行测试: