每日一学之认识Spring中的AOP

Posted 进击的Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一学之认识Spring中的AOP相关的知识,希望对你有一定的参考价值。


每日一学之认识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的主要内容,如果未能解决你的问题,请参考以下文章

每日一学之Nginx系列NO.5反向代理

每日一学之Java开发技巧正则表达式

每日一学

每日一学--Java关键字instanceof

C语言每日编程:打印一个圆形!代码+思路一学就会!

阿里四面:你知道Spring AOP创建Proxy的过程吗?