java - Spring 3 Java 配置 : Imported @Configuration not enhanced?

标签 java spring applicationcontext

我有一个应用程序,我试图将最新的 Spring 3 约定与基于注释的配置结合使用,但我也有使用构造函数注入(inject)的遗留类。根据 Spring 文档,您应该只调用创建该依赖项的方法并将其传递给需要它的构造函数。这似乎在 Configuration 类被增强时起作用,但似乎如果您 @Import Configuration 类,它就不会被增强,因此它可能会注入(inject)非 Autowiring 的实例。

具体来说,如果我的一个存储库是通过构造函数注入(inject)到另一个 bean 中的,并且该存储库是在与另一个 bean 相同的配置类中定义的(我知道存储库应该在它们自己的配置类中),那么它就没有连接使用注入(inject)的 EntityManager。

我的 bean :

public class MyBean {
    private ShouldBeSingleton d;
    public @Autowired MyBean(ShouldBeSingleton d) { this.d = d; }   
    public ShouldBeSingleton getMyDependency() { return d; }
}

public class ShouldBeSingleton { 
}

还有两个这样的配置类:

@Configuration
public class MyImportedConfig { 
    @Bean public ShouldBeSingleton mySingleton() {
        return new ShouldBeSingleton();
    }       
    @Bean public MyBean myBean() {
        return new MyBean(mySingleton());
    }       
}

@Configuration
@Import({MyImportedConfig.class})
public class MyConfig {
}

我的主图是这样的:

public static void main(String[] args) {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
    MyBean bean = context.getBean(MyBean.class);
    System.out.println("myInjectedSingleton=" + bean.getMyDependency());
    System.out.println("mySingleton=" + context.getBean(ShouldBeSingleton.class));
}

如果我加载 MyImportedConfig.class,我会得到正确的输出(即,如果我从 MyImportedConfig 中调用该方法,单例类是相同的):

myInjectedSingleton=test.ShouldBeSingleton@b42cbf
mySingleton=test.ShouldBeSingleton@b42cbf

但是,如果我更改 AnnotationConfigApplicationContext 以加载导入 MyImportedConfig 的 MyConfig,则会发生这种情况:

myInjectedSingleton=test.ShouldBeSingleton@a9ae05
mySingleton=test.ShouldBeSingleton@1dff3a2

这是预期的行为吗?我当前的解决方法是将任何需要将 EntityManager 注入(inject)到另一个配置类中的任何东西,导入它,然后在需要构造函数注入(inject)它的配置类中设置 @Autowired 依赖项。

我在 AnnotationConfigWebApplicationContext 中加载它,如果我在 contextConfigLocation 中指定每个配置类,那么所有配置类都会得到适当增强,但这似乎没有使用“模块化”@Import 功能。

最佳答案

所以...我猜这是一个错误?

关于java - Spring 3 Java 配置 : Imported @Configuration not enhanced?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2076354/

相关文章:

java - Spring应用上下文的Java配置的一些疑惑(依赖注入(inject))

java - 将二维数组绘制到网格上

java - compareTo 与 heapSort 的泛型

java - 如何使用JAVA显式实现接口(interface)成员?

spring - java.lang.IllegalArgumentException : Environment must not be null

java - Spring 占位符不解析 JavaConfig 中的属性

java - 将图像从数据库加载到 Spring 应用程序上下文中。我使用mybatis api

Spring 分层上下文

java - 维护调用之间状态的 Hibernate NamingStrategy 实现

java - 指定是否延迟加载 Spring Data