一个关于Spring IoC的简单问题

时间:2011-03-07 10:16:48

标签: java spring ioc-container

让我们想象一下,有1000个类(X1 ... X1000)都在库abc.jar中定义。

X *类使用了一些JSR-330注释,例如:

class X12 {

    @Inject
    Foo foo;

    @Inject
    Bar bar;

}

我的主要类是一个测试用例@RunWith(SpringJUnit4ClassRunner.class),引用的FooBar在bean XML文件中定义良好。

问题是,我不想在任何XML文件中定义X1 ... X1000。但我想自动连接它们,例如:

X173 x173 = new X173();

但问题是,使用Java新实例,foo / bar没有连线。

这也行不通:

X173 x173 = applicationContext.getBean(X173.class);

因为没有定义X173的bean。

并且,X173也可能包含X258类的成员,它也应该是有线的。在我解决了这个问题之前,我无法弄清楚如何实现它。

2 个答案:

答案 0 :(得分:3)

您可以使用autodetection将它们声明为Spring bean。

最明显的方法是使用Spring注释(例如@Component)注释这些类,然后将<context:component-scan />添加到XML中。

如果注释不是一个选项,<context:component-scan />支持可配置的过滤器。例如,如果这些类实际上名为X1...X1000,则可以使用regexp filter:

<context:component-scan base-package="com.example">
     <context:include-filter type="regex" expression="com\.example\.X\d{1,4}"/>
</context:component-scan>

答案 1 :(得分:0)

确定。有不同类型的测试。让我们来看看它们。

  • 在模块化测试中,您应该测试单个类并模拟它的依赖性。所以,你应该避免任何注射器。

  • 在集成中,您应该测试一些类的交互,因此您可以像通常的应用程序一样使用注入器。