Spring 未调用注释导入配置

Spring Annotations Import Config not called

我正在尝试制作一个使用 Spring 注释导入配置的应用程序。对于这个问题,我将其缩小为两个文件。初创公司 class:

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");
    }
}

和配置设置 包核心;

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

但只显示mainclass。看起来配置设置的构造函数根本没有被调用。由于导入注释,我希望它能调用它。

谁能解释一下出了什么问题?提前致谢!

您最好的选择是创建包含您的值的配置 class return 配置对象。通常我不倾向于添加一个包罗万象的配置对象,但每个组件(数据库、控制器等)都有一个配置文件。

然后您可以 return 配置的对象作为 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 容器之外,您将无法 bootstrap 它,但是使用上述方法,您可以调用在需要使用的地方直接配置组件