我堅持解決這個問題。Spring如何從ProxyFactoryBean中獲取具有原型範圍的bean
使用的組件:春天1.2.8,3.2.0休眠CR1,tomcat的,支柱,Java 6的
我試圖與範圍=原型來自ProxyFactryBean是獲取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>
在代碼時,我做以下操作:
...................
。 ..................
IRuleCheckTask checkTask =(IRuleCheckTask)applicationContext.getBean(「ruleCheckTaskService」); checkTask.setTestCase(oneTestCase);
java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknow n Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Un known Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoi npointUsingReflection(AopUtils.java:287)
at org.springframework.aop.framework.ReflectiveMethod Invocation.invokeJoinpoint(ReflectiveMethodInvocat ion.java:181)
at org.springframework.aop.framework.ReflectiveMethod Invocation.proceed(ReflectiveMethodInvocation.java :148)
at org.springframework.transaction.interceptor.Transa ctionInterceptor.invoke(TransactionInterceptor.jav a:96)
at org.springframework.aop.framework.ReflectiveMethod Invocation.proceed(ReflectiveMethodInvocation.java :170)
at org.springframework.aop.framework.JdkDynamicAopPro xy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy21.setTestCase(Unknown Source)
這是工作如果ProxyFactryBean是我用ruleCheckTask代替ruleCheckTaskPrototype:
上checkTask豆試圖調用setTestCase當我得到以下異常。問題是,在那種情況下,我總是獲得ruleCheckTask的單例。我總是需要新的實例。 一件小事RuleCheckTask實現了Runnable接口。
有人能給我一個提示嗎?
謝謝
非常感謝。它真的很有用。我犯了錯誤,我把單身屬性目錄放入聲明中,並且我得到異常,ProxyFactoryBean必須是單例。而我的第二個錯誤是,我通過屬性「target」和「ref」而不是「targetName」和「value」來指定目標。多麼小的細節,他們很重要。獲取這些信息並不容易。你怎麼知道?你從哪裏學到這些東西?你能推薦一些關於春天的好書,電子書,鏈接嗎?謝謝 –
squirrelInTheBarel
春天的團隊和其他人都有很好的書,春天有很好的參考文獻。但是當你遇到這樣的問題時,最好的方法是將源代碼鏈接到庫並跳到裏面。大多數時候你會花更少的時間來找到正確的道路。例如,如果您在ProxyFactoryBean.getObject()上放置斷點,則解決方案很明確。使用源碼,盧克...(UTSL) –