我很难理解为什么 Spring Java Config using 中的某些东西@Autowired
不起作用。
首先,我试图@Autowired
在 Java Config 类中移动我的所有注释。这具有使我的“POJO”回到真正的 POJO 的效果。然后,我不仅可以在 Spring 上下文之外轻松测试它们,还可以轻松轻松地使用模拟对象。
所以我首先尝试了这个:
@Configuration
public class Module3ConfigClass {
@Autowired
private Module1Bean1 module1Bean1;
@Autowired
private Module2Bean1 module2Bean1;
@Bean
public Module3Bean1 module3Bean1() {
return new Module3Bean1(module1Bean1, module2Bean1);
}
}
但是,在Module3Bean1
调用构造函数时,传入的 Bean 都为 null。如果您没有遵循我上面编造的命名约定,那么这两个 bean 都将由单独的 Java Config 配置文件创建。另请注意,所有内容都已正确连接 - 我知道这一点,因为当@Autowired
标签位于Module3Bean1
.
FWIW,我尝试向方法添加@DependsOn
注释module3Bean1()
,但结果相同。我想我真的很想了解这种行为,它是否正确(我怀疑它是,但为什么)?
最后,我找到了一个可以接受的解决方法:
@Configuration
public class Module3ConfigClass {
@Bean
@Autowired
public Module3Bean1 module3Bean1(Module1Bean1 module1Bean1, Module2Bean1 module2Bean1) {
return new Module3Bean1(module1Bean1, module2Bean1);
}
}
这对我来说似乎很好,但如果有人愿意对此发表评论,那也将受到欢迎。