Spring中的AOP理解

来源:互联网 发布:php require 编辑:程序博客网 时间:2024/05/01 03:12

1、术语的理解

切面 首先建立一个切面,相当于一个过滤器之类的东西,就是对于某一种功能上的需求进行判断,并分为不同的情况来处理。

连接点:对这一类问题中的某些方法,可能要穿过这个切面去执行,会在切面上进行判断。它只是连接点,但还不确定是否要切入切面。

切入点:是一个断言,并且他对应一个通知,它会去判断切入点,用此断言去判断切入点,也就是方法,当这个方法满足它的需求的时候,如以XXX开头,然后就会执行通知,通知某一组件去执行某一通用的操作。

通知:在切入点执行的动作,共有三种,AroundBeforeAfter。也就是在连接点(方法)执行的前,后,或来回吧,也就是前后都有,功能强大,去执行某一个动作。

目标对象:当符合切入点的时候,就会通知它去执行一些操作,因为AOP是通过动态代理来执行的,所以,它是一个代理对象。

引入:官方说明:Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。我的理解就是对目标对象所执行的操作的一个规范比如对增加、修改、查询要开启事务。

织入:就是把切面配置到应用程序中,并创建目标对象,也就是被通知对象,就是符合条件要执行的操作。

 

2、对应实际的配置进行分析

 

<!-- 配置事务管理器-->

<bean id="transactionManager"

     class="org.springframework.orm.hibernate3.HibernateTransactionManager">

     <property name="sessionFactory">

         <ref bean="sessionFactory" />

     </property>

</bean>

 

<!-- 配置事务的传播特性-->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

     <tx:attributes>

         <tx:method name="save*" propagation="REQUIRED"/>

         <tx:method name="update*" propagation="REQUIRED"/>

         <tx:method name="delete*" propagation="REQUIRED"/>

     </tx:attributes>

</tx:advice>

 

<!-- 那些类的哪些方法参与事务 -->

<aop:config>

     <aop:pointcut id="allManagerMethod"

         expression="execution(* org.jsoft.services.impl.*.*(..))"/>

     <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" />

</aop:config>

上面是Spring处理事务的AOP部分,可以看出来:

1、     切入点PointCut通过Expression断言来判断org.jsoft.services.impl包下的所有类的方法,具体的断言内容在advice-ref="txAdvice"里面,也就是方法的判断,然后去通知事务管理器。

2、     或者这样看,这里有一个通知者<aop:advisor它有两部分组成,第一个要处理的切入点,pointcut-ref="allManagerMethod"就是要对哪些连接点,也就是哪些类下的哪些方法,第二个是具体的判断要求和要执行的操作。也就是advice-ref="txAdvice"它对于不同的情况有不同的目标对象,也就是此处的事务管理器。

3、     整个流程就是这样,切面,它也就像一个中间的过滤器,用来过滤方法,也就是连接点,切面有自己的过滤范围,也就是切入点的配置范围,同时切入点有自己的if条件,当满足某种条件的时候,也就是符合切入点,符合断言,然后就去通知目标对象,也就是一个类去执行某些操作。这就是AOP,引入是对目标对象的规定,规定他要做什么;织入,也就是配置切面和切入点,并创建目标对象,也就是一个处理的类。

0 0