java - 将 YML/Java 配置 Autowiring 到 Spring Boot Bean

标签 java spring-boot

如果我有一个 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/

相关文章:

java - Hibernate 缓存 - 空表

java - JZMQ 无法在 Ubuntu 上构建 debian 包

java - 使用 Java EE 处理大量数据

java - 如何从 JFrame 中删除 JButton?

java - 实体对象未持久保存在 H2 数据库中

java - 使用spring boot无法连接MySQL数据库?

java - 可运行的 jar (ExceptionInInitializerError)

mongodb - 在 spring 中创建过滤器聚合

java - Spring Actuator http,但嵌入式 servlet https

java - 如何在 Spring Boot 中使用 cron 作业根据指定条件安排作业