Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring3Java配置:导入的@Configuration未增强?_Java_Spring_Applicationcontext - Fatal编程技术网

Spring3Java配置:导入的@Configuration未增强?

Spring3Java配置:导入的@Configuration未增强?,java,spring,applicationcontext,Java,Spring,Applicationcontext,我有一个应用程序,我正在尝试使用最新的Spring3约定和基于注释的配置,但我也有使用构造函数注入的遗留类。根据Spring文档,您应该只调用创建依赖项的方法,并将其传递给需要它的构造函数。当配置类得到增强时,这似乎是可行的,但如果@Import配置类,它似乎没有得到增强,因此它可能会注入非自动连接的实例 具体地说,如果我的一个存储库被构造函数注入到另一个bean中,并且该存储库与另一个bean在同一个配置类中定义(我知道存储库应该在它们自己的配置类中),那么它不会与注入的EntityManag

我有一个应用程序,我正在尝试使用最新的Spring3约定和基于注释的配置,但我也有使用构造函数注入的遗留类。根据Spring文档,您应该只调用创建依赖项的方法,并将其传递给需要它的构造函数。当配置类得到增强时,这似乎是可行的,但如果@Import配置类,它似乎没有得到增强,因此它可能会注入非自动连接的实例

具体地说,如果我的一个存储库被构造函数注入到另一个bean中,并且该存储库与另一个bean在同一个配置类中定义(我知道存储库应该在它们自己的配置类中),那么它不会与注入的EntityManager连接

我的豆子:

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中调用该方法,则singleton类是相同的):

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

myInjectedSingleton=test.ShouldBeSingleton@a9ae05
mySingleton=test.ShouldBeSingleton@1dff3a2
这是预期的行为吗?我目前的解决方法是将需要EntityManager注入的任何内容移动到另一个配置类,导入它,然后在需要注入它的配置类中设置@Autowired依赖项


我正在将其加载到注释ConfigWebApplicationContext中,如果我在contextConfigLocation中指定每个配置类,那么所有配置类都会得到适当的增强,但这似乎没有使用“模块化”导入功能。

。。。我猜这是一只虫子

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