`
wangxuliangboy
  • 浏览: 210663 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ProxyFactoryBean什么时候需要配置proxyTargetClass

阅读更多

spring ProxyFactoryBean什么时候需要配置proxyTargetClass

比如现在有这样一段代码:
<bean id="ttransactionDefinition" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
        <property name="transactionManager">
            <ref bean="transactionManager" />
        </property>
        <property name="transactionAttributeSource">
            <ref bean="txAttributeSource" />
        </property>
</bean>

<bean id="test" parent="ttransactionDefinition">
 <property name="proxyTargetClass" value="true"></property>
 <property name="target">
  <bean class="com.alibaba.intl.biz.escrow.message.TestTram" />
 </property>
</bean>

<bean id ="testProxyCls" class="com.wolf.TestProxyClass">
 <property name="test" bean="test"/>
</bean>
proxyTargetClass需要配置的情况只有一种:
  当TestTram类有实现某个接口,而TestProxyClass类中配置的类对象是TestTram时(而不是TestTram实现的接口),这时候你需要配置proxyTargetClass=true
 
  如果TestTram没有实现某个接口,而TestProxyClass类中配置的类对象是TestTram,这个时候我们是不需要配置proxyTargetClass=true的.(使用cgilib来动态代理)
  如果TestTram实现某个接口, 而TestProxyClass类中配置的是TestTram实现的interface的话.那样我既不需要配置proxyInterface,也不需要配置proxyTargetClass

 
 为什么我们在没有配置proxyInterface情况下,去配置proxyTargetClass.因为spring会去拿到当前配置的target实现的所有接口,然后通过动态代理出类.
 
 可以看看spring的这段代码:(AbstractSingletonProxyFactoryBean类)
  if (this.proxyInterfaces != null) {
   proxyFactory.setInterfaces(this.proxyInterfaces);
  }
  else if (!isProxyTargetClass()) {
   // Rely on AOP infrastructure to tell us what interfaces to proxy.
   proxyFactory.setInterfaces(ClassUtils.getAllInterfacesForClass(targetSource.getTargetClass()));
  }
  this.proxy = getProxy(proxyFactory);

分享到:
评论
1 楼 agapple 2009-03-10  
写的真够绕的,这些spring手册都已经说的很清楚了!!

相关推荐

    spring-aop-ProxyFactoryBean 源码分析

    如果没有接口,或者配置了`proxyTargetClass=true`,则会使用CGLIB代理,它通过字节码生成技术实现。 2. **配置属性**: - `target`:这是必须设置的属性,表示要代理的目标对象。 - `interceptors`或`advisors`...

    spring AOP配置的几种方式

    &lt;bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"&gt; &lt;value&gt;com.sxt.spring.model.IUser&lt;/value&gt; &lt;value&gt;afterAdvice &lt;value&gt;logAdvice &lt;value&gt;aroundAdvice ...

    Spring基于ProxyFactoryBean创建AOP代理

    3. proxyTargetClass:是否对类代理而不是接口,设置为 true 时,使用 CGLIB 代理。 4. interceptorNames:需要植入目标的 Advices。 5. singleton:返回的代理是否为单例,默认为 true(返回单实例)。 6. optimize...

    spring入门学习-6、AOP几种配置方式详解.pdf

    - **强制使用 CGLib 代理**:通过设置 `proxyTargetClass` 属性为 `true` 可以强制使用 CGLib 代理。 - **接口指定**:如果目标类实现了多个接口,则可以通过设置 `proxyInterfaces` 属性来指定创建的代理类型。 ##...

    Spring_0300_JDKProxy

    在这个例子中,`Target`是我们要代理的类,它需要实现一个接口,以便JDK Proxy能够创建它的代理。`ProxyFactory`负责生成代理对象,我们可以通过配置`addAdvice`来添加拦截器,定义代理对象在调用方法前后的行为。 ...

    spring 要点总结

    &lt;bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"&gt; &lt;property name="target"&gt; &lt;ref bean="target bean"/&gt; &lt;list&gt;&lt;value&gt;interfaces of target bean implemented&lt;/value&gt;&lt;/list...

    spring-aop.rar_aop1270_spring_spring aop

    1. `ProxyFactoryBean`:通过设置`target`属性指定目标对象,然后调用`createProxy()`方法生成代理对象。 2. `ProxyFactory`:与`ProxyFactoryBean`类似,但更底层,提供了更多的自定义选项。 3. `...

    Spring 应用之AOP

    &lt;bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"&gt; &lt;value&gt;advisor&lt;/value&gt; &lt;!-- 引用顾问 --&gt; &lt;property name="target" ref="targetObject"&gt;&lt;/property&gt; &lt;!-- 目标对象 --&gt;...

    spring aop

    &lt;bean id="proxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean"&gt; &lt;property name="target" ref="targetObject"/&gt; &lt;value&gt;beforeAdvice &lt;value&gt;afterReturningAdvice ``` 2. ...

    AllDataDC Test

    &lt;bean id="studentDaoProxy" class="org.springframework.aop.framework.ProxyFactoryBean"&gt; &lt;property name="target" ref="studentDao"/&gt; &lt;value&gt;myAspect ``` 在这个例子中,`myAspect`是一个切面,`...

    spring_dynamic_proxy:基于接口基于子类的动态代理

    在Spring Dynamic Proxy模块中,`org.springframework.aop.framework.ProxyFactoryBean`和`org.springframework.aop.framework.ProxyFactory`是创建代理对象的主要工具。它们可以根据配置的拦截器链来创建代理,并且...

    spring Aop文档

    在深入了解Spring AOP之前,我们需要了解几个基本的概念: 1. **切面(Aspect)**:封装了横切关注点的模块。在Spring AOP中,切面可以由类或者方法来实现。 2. **连接点(JointPoint)**:程序执行过程中的某个特定点...

    Spring AOP的实现原理详解及实例

    在具体的实现上,Spring提供了一个ProxyFactoryBean工厂类,开发者可以通过配置这个工厂Bean来生成代理对象。开发者需要指定目标对象以及要应用的拦截器(advisors)。拦截器可以是简单的拦截器,也可以是复杂的切面...

    java-aop-predicate-dispatch:java中使用AOP实现通用谓词分派机制

    - `org.springframework.aop.framework.ProxyFactoryBean` 或 `org.springframework.aop.aspectj.autoproxy.AspectJProxyFactory`:创建代理对象。 - `org.springframework.aop.MethodBeforeAdvice`,`org.spring...

Global site tag (gtag.js) - Google Analytics