我有一个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"
,因为它会影响上下文中的所有bean(此属性会影响上下文中的所有bean)。
有没有一种方法可以取消代理注入的A
bean,这样我就可以将其转换为AImpl
?