每日一学之认识Spring中的AOP
Posted 进击的Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一学之认识Spring中的AOP相关的知识,希望对你有一定的参考价值。
图片来自于百度地图
什么是AOP
Aop,又名面向切面编程。指在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。分为静态AOP和动态AOP。静态AOP是指AspectJ实现的AOP,他是将切面代码直接编译到Java类文件中。动态AOP是指将切面代码进行动态织入实现的AOP,Spring的AOP为动态AOP。
实现方式
JDK提供的动态代理技术 和 CGLIB(动态字节码增强技术) 。尽管实现技术不一样,但都是基于代理模式 , 都是生成一个代理对象 。
能够干什么
使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。
Spring中配置AOP
在spring中配置AOP分为两种类型,第一种是使用<aop:aspect>,第二种是使用<aop:advisor>。
方式一
<aop:config>
<!-- 配置切点 -->
<aop:pointcut expression="execution(* *.*(..))" id="logAopPointcut"/>
<!-- 配置切面 -->
<aop:aspect ref="logAop">
<aop:before method="before" pointcut-ref="logAopPointcut"/>
</aop:aspect>
</aop:config>
切点是指要在哪些类中使用切面
切面是指自己书写的日志切面、异常切面等,此种方式多用于日志或者异常等配置。
方式二
<aop:config>
<aop:pointcut expression="execution(* cn.aeol.cscc.service.*.*.*(..))" id="serviceMethod" />
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
</aop:config>
<tx:advice transaction-manager="transactionManager" id="txAdvice">
<tx:attributes>
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="list*" propagation="REQUIRED" read-only="true" />
<tx:method name="count*" propagation="REQUIRED" read-only="true" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="is*" propagation="REQUIRED" read-only="true"/>
<tx:method name="del*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
与方式一相同的是都要先声明切点。
<aop:advisor>为通知器,与<aop:aspect>想反的是,前者是配置切点的方法的属性,后者是配置切面的方法属性。
下期提要
说完了Spring的左右两大护法,下期我们说一说Spring expression(表达式)。
以上是关于每日一学之认识Spring中的AOP的主要内容,如果未能解决你的问题,请参考以下文章