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