spring中的AOP

一直搞不清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类代理,在方法执行前(后、环绕)进行切面处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值