【问题标题】:Invoke a method which is inside @configuration class调用 @configuration 类中的方法
【发布时间】:2020-10-28 06:11:30
【问题描述】:

我有一门课如下:

@Configuration
Public class myConfig implements InitilizingBean{

Private List<HashMap<String,String>> mqConfigsfromDB = null;

...
...

public void reload(){
  initialize();
}
public void initialize(){
  //Load values from Db
  //set to the values to List 
  //mqConfigsfromDB
}

Public void afterPropertiesSet(){
  initialize();
}
}

我想从不同的类调用 reload() 方法。

此配置类从 DB 加载 mq 配置并设置工作正常的侦听器。我只想有一个触发点,通过 reload() 方法从另一个类重新加载配置。

有什么想法可以达到同样的效果吗?

【问题讨论】:

  • 当您提出问题时,您会查看答案并接受解决您问题的答案。

标签: spring spring-boot configuration


【解决方案1】:

您可以在@Configuration 注释类中使用@Autowire。

PS:有一个 @PostConstruct 注释可以用来进行初始化,而不必调用 .initialize()。

【讨论】:

  • @Configuration 注释类上使用@Autowired 应该被建议并且也是不合法的。 @PostConstruct 是个好主意。
【解决方案2】:

@Configuration 注解用于创建 bean 和加载其他配置。此类调用方法不属于最佳实践。
对于您的场景,您可以将@Configuration 注释替换为@Component,并在initialize 方法上使用@PostConstruct 注释来自动加载配置。

@Component
Public class LoadMQProperties {

Private List<HashMap<String,String>> mqConfigsfromDB = null;

public void reload(){
  initialize();
}

@PostConstruct
public void initialize(){
  //Load values from Db
  //set to the values to List 
  //mqConfigsfromDB
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2016-01-08
    • 2019-11-16
    • 2014-12-31
    • 2016-10-14
    • 2016-02-14
    相关资源
    最近更新 更多