我有一个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"/>
Run Code Online (Sandbox Code Playgroud)
现在我想集成测试它,但首先我需要模拟依赖D,因为它做了太多的东西.由于AImpl实现了一个接口并包含一个事务注释,生成的代理只与接口兼容A,所以我可以这样做:
@Inject @Named("aImpl")
private A a;
Run Code Online (Sandbox Code Playgroud)
但不能:
@Inject @Named("aImpl")
private AImpl a;
Run Code Online (Sandbox Code Playgroud)
结果,我无法模仿我的依赖.
请注意,添加void setSomeDependency(D dependency)到界面A不是一个选项,因为它没有商业含义.它都没有使用proxy-target-class="true",因为它打破了很多其他bean(这个属性会影响上下文中的所有bean).
有没有办法解开注入的bean A,所以我可以把它投射到AImpl?