gpt4 book ai didi

java - Spring Java Config 使用 Autowired 导致 NPE

转载 作者:搜寻专家 更新时间:2023-11-01 03:40:39 25 4
gpt4 key购买 nike

我很难理解为什么在 Spring Java Config 中使用 @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构造函数被调用,传入的两个Beans都是null。如果您不遵循我上面制定的命名约定,那么这两个 bean 都将由单独的 Java Config 配置文件创建。另请注意,所有 都正确连接 - 我知道这一点,因为当 @Autowired 时一切正常标签位于 Module3Bean1 中相应的私有(private)成员字段上.

FWIW,我尝试添加一个 @DependsOnmodule3Bean1() 的注释方法,但结果相同。我想我真的很想了解这种行为,它是否正确(我怀疑它是正确的,但为什么呢)?

最后,我在这里找到了一个可接受的解决方法:

@Configuration
public class Module3ConfigClass {

@Bean
@Autowired
public Module3Bean1 module3Bean1(Module1Bean1 module1Bean1, Module2Bean1 module2Bean1) {
return new Module3Bean1(module1Bean1, module2Bean1);
}
}

这对我来说似乎很好,但如果有人愿意对此发表评论,那也将受到欢迎。

最佳答案

我认为您遇到了我刚刚遇到的同样问题。在我的例子中,问题是无效的 xml 配置。在我的模块 B 中,我的配置如下:

<beans>
<context:component-scan base-package="com.moduleB"/>
<import resource="classpath:applicationContext-moduleA.xml"/>
</beans>

在 moduleA 上下文中,我放置了“context:annotation-config”注解。当我将导入/上下文顺序更改为:

<beans>
<import resource="classpath:applicationContext-moduleA.xml"/>
<context:component-scan base-package="com.moduleB"/>
</beans>

配置类属性的 Autowiring 开始工作。

关于java - Spring Java Config 使用 Autowired 导致 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15392344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com