AOP的注解配置与xml文件配置

一,注解配置方式
1.五种增强的配置
详见五种增强一文点击这里查看
2.在五种增强(或者说是通知)中需要有切入点表达式,而切入点表达式也可以用注解配置:

    @Pointcut("execution(public int *(..))")//这个空方法是为了解决注解内切入点表达式复用的问题
	public void p() {
		
	}

然后在原来写切入点表达式的地方就可以用“p()”代替。
3.@order注解
该注解用来在存在多个有@Aspect注解修饰的类(切面类)时确定执行顺序
例如:
在这里插入图片描述
在这里插入图片描述
这两个切面类的前置增强方法均匹配到同一个目标方法时就会按照@order注解规定的顺序执行。@order注解值越小,优先级越高

二,xml配置方式
这里也有两种方式:
1.<aop:aspectj-autoproxy proxy-target-class="false"></aop:aspectj-autoproxy><!-- 程序中注解配置 -->
该种方式是跟注解配置方式搭配使用的,这样配置时就是用注解配置aop
2.

<bean id="aspect" class="com.jd.calculator.Aspect"></bean>
<bean id="aspect2" class="com.jd.calculator.Aspect2"></bean>

<aop:config proxy-target-class="false">
		<aop:pointcut expression="execution(public int *(..))" id="point"/>
		<aop:aspect ref="aspect" order="1">
			<aop:before method="before" pointcut-ref="point"/>
		</aop:aspect>
		
		<aop:aspect ref="aspect2" order="2">
			<aop:before method="before" pointcut-ref="point"/>
		</aop:aspect>
</aop:config>

这种配置方式需要先配置切面类的bean,然后在按上面配置,这个例子中只配置了前置增强(其他增强也同理)。该种配置方式不用在程序中使用相关注解,而且程序中原有的相关注解也会全部失效。比如这个例子在xml中配置了两个切面类,另外还有一个切面类是在程序中使用注解配置的,此时就用注解配置的切面类不会起效,只有两个在xml中配置的切面类才会起效。

发布了74 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/naruhina/article/details/96283606
今日推荐