Spring Annotations Import Config未调用

问题描述 投票:-1回答:1

我正在尝试使用Spring注释来创建一个导入配置的应用程序。对于这个问题,我将其缩小为两个文件。 Startup类:

package core;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Slf4j
@Configuration
@Import(ConfigSettings.class)
public class Startup {
    public static void main (String args[]) {
    log.info("main class");
    }
}

和ConfigSettings包核心;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Slf4j
@Configuration
@ComponentScan({"connections", "filter"})
@PropertySource({"classpath:config/${env.config:dev}.application.properties"})
public class ConfigSettings {

    public ConfigSettings() {
    log.info("Constructor ConfigSettings");
    }
}

我期望结果如下:

[INFO]Constructor ConfigSettings
[INFO]main class

但它只显示了主类。看起来配置设置的构造函数根本没有被调用。我希望它因为导入注释而调用它。

谁能解释出了什么问题?先感谢您!

java spring configuration spring-annotations
1个回答
2
投票

你最好的办法是让config类返回包含你的值的配置对象。通常我不倾向于添加一个包罗万象的配置对象,但是每个组件(数据库,控制器等等)都有一个配置文件。

然后,您可以将配置的对象作为bean返回,让spring注入它。如果我要为RestTemplate创建一个配置文件(作为一个简单的例子):

@Service
public class RestClientConfig {

    @Value("${your.config.value}")
    private String yourValue;


    private final RestTemplate restTemplate = new RestTemplate();

    @Bean
    public RestTemplate restTemplate() {
      // Configure it, using your imported values
      // ...

      return restTemplate;
   }
}

但是,main方法位于spring容器之外,您将无法以这种方式引导它,但使用上述方法,您可以直接在需要使用它的位置调用已配置的组件。

© www.soinside.com 2019 - 2024. All rights reserved.