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 它,但是使用上述方法,您可以调用在需要使用的地方直接配置组件
我正在尝试制作一个使用 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 它,但是使用上述方法,您可以调用在需要使用的地方直接配置组件