让我们想象一下,有 1000 个类 (X1...X1000),它们都定义在库 abc.jar
中。
X* 类使用了一些 JSR-330 注释,例如:
class X12 {
@Inject
Foo foo;
@Inject
Bar bar;
}
我的主类是一个测试用例@RunWith(SpringJUnit4ClassRunner.class)
,引用的Foo
、Bar
在bean XML 文件。
问题是,我不想在任何 XML 文件中定义 X1...X1000。但我想自动连接它们,例如:
X173 x173 = new X173();
但问题是,使用 Java 新实例时,foo/bar 没有连接。
这也行不通:
X173 x173 = applicationContext.getBean(X173.class);
因为没有定义 X173 的 bean。
而且,X173 也可能包含 X258 类的一个成员,它也应该被连线。在解决这个问题之前,我无法弄清楚如何实现它。
最佳答案
您可以使用 autodetection将它们声明为 Spring bean。
最明显的方法是用 Spring 注解来注解这些类,例如 @Component
然后添加 <context:component-scan />
到您的 XML。
如果注释不是一个选项,<context:component-scan />
支持可配置的过滤器。例如,如果这些类实际上被命名为 X1...X1000
,您可以使用正则表达式过滤器:
<context:component-scan base-package="com.example">
<context:include-filter type="regex" expression="com\.example\.X\d{1,4}"/>
</context:component-scan>
关于java - 一个关于Spring IoC的简单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218391/