如果我有一个 application.yml 看起来像
system:
props:
version: 1.0.0
host: myhost
myapp:
environment: LOCAL
---
spring:
profiles: DEV
system:
myapp:
environment: DEV
devhost: mydevhost
---
spring:
profiles: PROD
system:
myapp:
environment: PROD
testhost: myprodhost
然后我使用
设置了一个配置类@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class MyConfig {
private string devhost;
:
:
public String getDevHost() {return devhost;}
}
我能否将 MyConfig
Autowiring 到一个类中,该类是一个类的注释 bean,看起来像
@Configuration
@EnableJms
public class MyOtherConfig {
@Bean
public Object beanThatNeedsMyConfig(){return new beanThatNeedsMyConfig();}
}
我尝试使用我的直觉并在 beanThatNeedsMyConfig()
中 Autowiring 它,我通过 myConfig.getDevHost()
调用它,但我得到了一个空指针作为 myConfig
为空。我假设 Spring 尚未承认它的存在。我仍在努力掌握 Spring Boot 和生命周期等方面的知识。我知道如何实现这一点吗?
最佳答案
因此,您的原始代码中发生的事情是您没有将任何需要配置的bean Autowiring
。当您这样做时:
@Bean
public Object beanThatNeedsMyConfig(){return new beanThatNeedsMyConfig();}}
您没有将 MyConfig
bean 传递到需要它的 bean
中。 Autowiring 很棒,但它不是魔法。要传递它,你应该将它 Autowiring 到 MyOtherConfig
类中,或者你应该完全删除 beanThatNeedsMyConfig()
方法,这将允许 spring 创建 bean 并自动执行 Autowiring .
顺便说一句:@Inject
注释实际上应该只用在构造函数上,任何告诉你不同的人都是在骗你。如果您将它放在 BeanThatNeedsMyConfig
的构造函数中,那么如果不传入对象就无法构造它,您的问题将不言而喻。
关于java - 将 YML/Java 配置 Autowiring 到 Spring Boot Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38506526/