我有一個Spring bean,讓我們說:是否可以取消一個Spring bean?
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class AImpl implements A {
public void setSomeDependency(D dependency) {
// This setter DOES NOT BELONG to interface A
}
}
<bean id="aImpl" class="AImpl"/>
現在我想集成測試,但首先我需要模擬依賴D
,因爲它沒有太多的東西。由於AImpl
實現一個接口,幷包含事務註釋,生成的代理只與接口A
兼容,因此我可以這樣做:
@Inject @Named("aImpl")
private A a;
但不能:
@Inject @Named("aImpl")
private AImpl a;
結果,我無法嘲笑我的依賴。
請注意:添加void setSomeDependency(D dependency)
接口A
是不是一種選擇,因爲它沒有業務含義。無論是它使用的是proxy-target-class="true"
,因爲它打破了一大堆其他豆類(此屬性會影響所有的豆類在上下文中)。
有沒有辦法來unproxy注入豆A
,這樣我就可以將其轉換爲AImpl
?
[將Spring的代理對象投射到實際運行時類]的可能重複(http://stackoverflow.com/questions/5976247/casting-a-springs-proxy-object-to-the-actual-runtime-class ) – skaffman
@skaffman:謝謝你指出,我給春天標籤添加了這個問題FAQ –