java - 一个关于Spring IoC的简单问题

标签 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 类的一个成员,它也应该被连线。在解决这个问题之前,我无法弄清楚如何实现它。

最佳答案

您可以使用 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/

相关文章:

java - 在Java中制作对数螺旋

java - EJB、JPA 和 Eclipse 的连接问题

java - 使用 javax mail 发送的电子邮件发送时主题和字段为空

c# - Unity IoC 和静态方法

java - 如何在 Eclipse 中按名称查找包?

java - 使用登录端点/Web服务成功登录后,如何发送额外的数据/信息?

spring - Grails Rest Client Builder 抛出 OperationNotSupported

java - 如何在 Java 中为 REST 服务获取 WSDL

c# - 使用 Unity IoC 容器解析 C# 中的包装类

c# - 我应该避免使用依赖注入(inject)和 IoC 吗?