让我们假设我有定序器和下面的Beans。 Sequencer负责从数据库序列中获取下一个值。 OracleSequencer用于生产模式,即JUnit测试期间的TestSequencer。如何在测试期间注入测试执行,在生产模式下执行生产 - Spring,JSR-330
public interface Sequencer{
long getNextValue();
}
@Named("OracleSequencer")
public class OracleSequencer implements Sequencer[
...
}
@Named("TestSequencer")
public class TestSequencer implements Sequencer[
...
}
这是我要如何使用它:
@Named
public class BusinessBean{
@Inject
private Sequencer sequencer;
}
我的问题是: 当我在生产模式下运行的应用程序,我想注入OracleSequencer在BusinessBean,当我运行JUnit-Test我想要注入TestSequencer。 JSR-330(@Inject,@Named)有可能吗?
我发现2级脏的解决方案:
在试验开始时,定序器可以在豆,其从弹簧的ApplicationContext截取来代替。原型合适且TestSequencer没有任何其他依赖关系时可能:
BusinessBean bean = springContext.getBean(..); bean.setSequencer(new TestSequencer());
我们可以用@ProductionScope和TestSequencer用@TestScope注释OracleSequencer,并配置Spring,以适当的模式扫描合适的注释。
你有没有其他想法如何解决这个问题?
Spring 3.1。