spring中的AOP

来源:互联网 发布:培训机构程序员 编辑:程序博客网 时间:2024/06/08 07:08

一直搞不清spring中的aop与动态代理有什么区别,应该可以说aop是要使用动态代理的----------我想应该是对的0.0

aop的处理主要分为四种:方法执行前进行什么处理、方法执行后进行什么处理、抛出异常时进行什么处理和方法环绕进行什么处理。

1.spring中一般的aop实现(即不适用通配符的实现):

<!--A为被代理者,或者说是被通知者-->

<bean id="A"    class="A的包路径"   scope=“prototype”>

<property   name="A中的属性"   value=“属性的值”>

</bean>

<!--通知前,即在进行A中的方法之前执行的业务逻辑类配置-----其中B类需要实现MethodBeforeAdvice接口-->

<bean id="B"    class="B的包路径"   scope=“prototype”></bean>

<!--通知后,即在进行A中的方法之后执行的业务逻辑类配置-----其中C类需要实现AfterReturningAdvice接口-->

<bean id="C"    class="C的包路径"   scope=“prototype”></bean>

<!--方法环绕,写在D类中的proceed()方法前的能在A中的方法执行之前执行业务逻辑处理,写在proceed()方法后的能在A中的方法执行之后执行业务逻辑处理-----其中D类需要实现MethodInterceptor接口-->

<bean id="D"    class="D的包路径"   scope=“prototype”></bean>

<!--具体的代理类---其中的class是固定写法-->

<bean id="E"   class=“org.springframework.aop.framework.ProxyFactoryBean”>

<!--其中A表示被通知者,即被代理者>

<property   name="target"    ref="A"></property>

<!--选择aop处理方式,可以同时选择多个,但是需要注意的是:环绕之前的优先级大于before,环绕之后的优先级大于after>

<property   name="interceptorName">

      <list>

           <value>B<value>

          <value>C<value>

          <value>D<value>

      </list>

</property>

</bean>

2.通配符的aop实现:

看完方法1中的实现,你是否在思考一个问题,在方法1中,只有涉及到要是用A中的方法才能触发,那么我要在处理其他类中的方法也触发呢,怎么办,那有需要复制粘贴再写一遍,如果有通配符,将处理面扩大,那就不需要写重复的代码了。

<!--aop处理的bean配置,在该类中可以进行切面处理-->

<bean id="a"    class="a的包路径"   scope=“prototype”></bean>

<!--aop配置-->

<aop:config>

<!--其中expression部分是切面范围的配置(即谁会被代理),第一个*表示方法的访问控制修饰符,K表示路径,L:如果K的路径到类为止,则L用.就行,如果K的路径没有到类,则L用..代替,第二个*代表方法名,(..)中的..表示参数-->

   <aop:pointcut   id="b"   expression="execution(* kL*(..))"

   <aop:sapect   id="c"    ref="a">

   <!--执行方法之前进行处理-->

   <aop:before  pointcut-ref="b"   method="a类中的方法名"/>

   </aop:aspect>

  </aop:config>

</bean>

说明:在该配制方法中,只要是进过expression这个范围的都会被a类代理,在方法执行前(后、环绕)进行切面处理。

1 0