Spring利用dynamic proxy实现AOP

Spring利用dynamic proxy实现AOP
quote="firebody" ]
至于上面所说的动态代理,给你一个更简单的说法,比如Spring里的TransactionProxyFactoryBean,他是对支持事务管理的一个代理FactoryBean,利用动态代理,这个类可以不依赖于具体的target 接口,用户可以随意选择target 接口。也不需要用户再手工根据自己的target 接口扩展一个TransactionProxyFactoryBean。 这样的一个用到java.lang.reflect的动态代理机制,使得用户需要编写的代码量大大减小,也使得整个框架配置使用趋于一致。[/quote]


java代码: 

        <bean id="someObjectProxy" class="org. springframework. aop. framework. ProxyFactoryBean">
        <property name="proxyInterfaces">   
                 <value>ISomeInterface</value> 
                </property>       
                <property name="target">           
                        <ref bean="someObject"/>       
                </property>       
                <property name="interceptorNames">           
                        <list>               
                                <value>lockMixinAdvisor</value>           
                    </list>       
                </property>   
        </bean>




我奇怪的是,既然有下面这个,
java代码: 


<bean id="someObjectProxy" class="org. springframework. aop. framework. ProxyFactoryBean">



那么程序代码中, 怎么可以这样写?
java代码: 


ISomeInterface someObjectProxy = (ISomeInterface ) context
                . getBean ("someObjectProxy" );


注意,这里返回的是ISomeInterface ,而且这个someObjectProxy 对象已经具有了ILock+ISomeInterface 的功能,并且在行为表现的完全和ISomeInterface 一致。

如果Spring的代码是预编译的,那可以产生stub之类的,可这里是怎么实现的,挺让人奇怪哦,谁能解释一下么?

答案 : http://www.javajia.com/article.php?id=919


只是在这上面再封装的完美罢了,好好研究dynamic proxy的实现吧。


此外,还有这一段哦 :)

AOP的作用可以简单如下所说:“在一个组件的前后加上一些固定的内容。” 抛开AOP不说,我们自己如果想要写这东西,无非两种方式,一个是proxy实现,然后在proxy的前后添加内容;还有一种就是template实现。
所以在我看来,数据库层的模板其实也算是一种“AOP”。 不知道有没人对此有些意见和评述?

你可能感兴趣的:(Spring利用dynamic proxy实现AOP)