AOP编程
Posted su-feng-address
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AOP编程相关的知识,希望对你有一定的参考价值。
aop (aspect oriented programing)面向切面编程,是对所有对象或者一类对象编程,核心是在不增加代码的基础上,增加新的功能。
<!--配置被代理对象--> <bean id="testService" class="..."> <property name="name" value="Sufeng"> </bean> <!--配置前置通知--> <bean id="MyMethodBeforeAdvice" class="..."/> <!--配置代理对象--> <bean id="proxyFactoryBean" class="org.springframework.ProxyFactory"> <!--配置代理接口集--> <property name="proxyInterfaces"> <list> <value> TestServiceInter</value> </list> </property> <!--把通知植入到代理对象--> <property name="interceptorNames "> <!--这里相当于把这个前置通知和代理对象关联起来,我们也可以把通知看成是拦截器--> <value>MyMethodBeforAdvice</value> </property> <property name="target"> <value> </value> </property> </bean> </beans>
1 定义接口
2 编写对象(被代理对象-目标对象)
3 编写通知,通知是通过继承Spring提供的接口体现出来的
4 在beans.xml文件中配置
4.1 配置被代理对象=目标对象
4.2 配置了通知
4.3 配置了代理对象,它是ProxyFactoryBean的一个实例
4.3.1 <!--代理接口集-->
代理对象和被代理对象都实现相同接口;
4.3.2 植入通知
4.3.3 配置被代理对象 代理对象的名字只可以是interceptorName,是因为根据Spring提供的ProxyFactoryBean类内的setInterceptorName()方法注入,类只能是org.springframework.aop.frame.ProxyFactory
同样的,代理对象接口集属性名字也是唯一的,proxyInterfaces,被代理对象的名字只能是target.
补讲知识点,见下面的一段代码,试判断代码能否运行?
<!--业务逻辑层代码如下--> class A{ public void setName(String name){ System.out.println("name ="+name); } } <!--Spring配置如下--> <beans> <bean id="a" class ="A"> <property name="name" value="Sufeng"></property> </beans>
答案是
完全可以,让人普遍接受的说法是
Set方法执行与注入值给与某个参数完全无关,只取决于Spring中是否有相关属性配置,Spring在配置属性值时也只将值赋予给Set方法,且不管Set方法的处理过程。
ProxyFatury时动态代理技术,根据目标对象类型转换类型,若目标类实现了若干接口,Spring使用Java.lang.reflect.Proxy类代理,植入通知,并且代理完成 目标对象的所有请求。若目标对象未实现任何接口,则使用CGLIB接口。
以上是关于AOP编程的主要内容,如果未能解决你的问题,请参考以下文章