Java Spring如何从ProxyFactoryBean获得具有原型范围的bean

Java Spring如何从ProxyFactoryBean获得具有原型范围的bean,java,spring,Java,Spring,我一直在解决这个问题 使用的组件:Spring1.2.8、Hibernate3.2.0CR1、tomcat、struts、Java6 我正在尝试从ProxyFactoryBean获取scope=prototype的bean。我没有成功。我不知道出了什么事 以下是上下文: <beans> <bean id="ruleCheckTask" class="rulechecker.RuleCheckTask" singleton="false"> <be

我一直在解决这个问题

使用的组件:Spring1.2.8、Hibernate3.2.0CR1、tomcat、struts、Java6

我正在尝试从ProxyFactoryBean获取scope=prototype的bean。我没有成功。我不知道出了什么事

以下是上下文:

<beans>

    <bean id="ruleCheckTask" class="rulechecker.RuleCheckTask" singleton="false">

    <bean id="ruleCheckTaskPrototype" class="org.springframework.aop.target.PrototypeTargetSource">
       <property name="targetBeanName" value="ruleCheckTask" />
    </bean>

    <bean id="transactionInterceptorRuleCheckTask" class="org.springframework.transaction.interceptor .TransactionInterceptor">
       <property name="transactionManager"> 
           <ref bean="transactionManager" />
       </property>
       <property name="transactionAttributeSource">
          <value>
              rulechecker.IRuleCheckTask.run=PROPAGATION_REQUIRE S_NEW
          </value>
       </property>
   </bean>

  <bean id="ruleCheckTaskService" class="org.springframework.aop.framework.ProxyFact oryBean">
         <property name="target" ref="ruleCheckTaskPrototype" />
         <property name="proxyInterfaces">
             <value>
                  rulechecker.IRuleCheckTask
             </value>
        </property>
        <property name="interceptorNames">
              <list>
                   <value>transactionInterceptorRuleCheckTask</value>
              </list>
        </property>
   </bean>
</beans>
如果我在ProxyFactoryBean中使用ruleCheckTask而不是ruleCheckTaskPrototype,它就可以工作了。问题是,在这种情况下,我总是获得ruleCheckTask的单例。我总是需要新的实例。 RuleCheckTask实现可运行接口的一件小事

谁能给我一个提示吗

谢谢你

试试:

<bean id="ruleCheckTaskService" class="org.springframework.aop.framework.ProxyFact oryBean">
         <property name="targetName" value="ruleCheckTask" />
         <property name="singleton" value="false" />  <!-- this do the trick -->
         <property name="proxyInterfaces">
             <value>
                  rulechecker.IRuleCheckTask
             </value>
        </property>
        <property name="interceptorNames">
              <list>
                   <value>transactionInterceptorRuleCheckTask</value>
              </list>
        </property>
   </bean>

rulechecker.IRuleCheckTask
transactionInterceptorRuleCheckTask

您还可以将
targetSource
(no
target
)改为
ruleCheckTaskPrototype
。不同之处在于,在第一个配置中,您有一个独立的代理配置实例,在第二个配置中,
PrototypeTargetSource
在每个请求中都会获得一个新实例。

非常感谢。这真的很有效。我犯了错误,将singleton属性目录放入声明中,得到了一个异常,ProxyFactoryBean必须是singleton。我这边的第二个错误是,我通过属性“target”和“ref”而不是“targetName”和“value”指定了target。多小的细节啊,它们很重要。要得到这些信息并不容易。你怎么知道的?你在哪里学的?你能推荐一些关于春天的好书、电子书和链接吗?谢谢这里有来自spring源代码团队和其他人的好书,spring有非常好的参考文档。但是当您遇到这样的问题时,最好的方法是将源代码链接到库并跳入其中。大多数时候,你会花更少的时间找到正确的路径。例如,如果在ProxyFactoryBean.getObject()上设置断点,则解决方案是明确的。使用来源,卢克。。。(UTSL)
<bean id="ruleCheckTaskService" class="org.springframework.aop.framework.ProxyFact oryBean">
         <property name="targetName" value="ruleCheckTask" />
         <property name="singleton" value="false" />  <!-- this do the trick -->
         <property name="proxyInterfaces">
             <value>
                  rulechecker.IRuleCheckTask
             </value>
        </property>
        <property name="interceptorNames">
              <list>
                   <value>transactionInterceptorRuleCheckTask</value>
              </list>
        </property>
   </bean>