gpt4 book ai didi

java - Spring Autowiring Autowiring 的bean中的属性

转载 作者:搜寻专家 更新时间:2023-11-01 02:24:03 29 4
gpt4 key购买 nike

我是 Spring 的新手。我正面临 Spring-Boot 的问题。我正在尝试将一个字段从外部配置文件 Autowiring 到一个 Autowiring 的 bean 中。我有以下类(class)

应用程序.java

public class App {

@Autowired
private Service service;

public static void main(String[] args) {

final SpringApplication app = new SpringApplication(App.class);
//app.setShowBanner(false);
app.run();
}

@PostConstruct
public void foo() {
System.out.println("Instantiated service name = " + service.serviceName);
}
}

AppConfig.java

@Configuration
@ConfigurationProperties
public class AppConfig {

@Bean
public Service service() {
return new Service1();
}
}

服务接口(interface)

public interface Service {
public String serviceName ="";
public void getHistory(int days , Location location );
public void getForecast(int days , Location location );
}

服务1

@Configurable
@ConfigurationProperties
public class Service1 implements Service {

@Autowired
@Value("${serviceName}")
public String serviceName;
//Available in external configuration file.
//This autowiring is not reflected in the main method of the application.



public void getHistory(int days , Location location)
{
//history code
}

public void getForecast(int days , Location location )
{
//forecast code
}
}

我无法在 App 类的 postconstruct 方法中显示服务名称变量。我这样做对吗?

最佳答案

您可以用不同的方式加载属性:

想象一下由 spring-boot 自动加载的以下 application.properties。

spring.app.serviceName=Boot demo
spring.app.version=1.0.0
  1. 使用@Value 注入(inject)值

    @Service
    public class ServiceImpl implements Service {

    @Value("${spring.app.serviceName}")
    public String serviceName;

    }
  2. 使用@ConfigurationProperties 注入(inject)值

    @ConfigurationProperties(prefix="spring.app")
    public class ApplicationProperties {

    private String serviceName;

    private String version;

    //setters and getters
    }

您可以使用 @Autowired 从另一个类访问此属性

@Service
public class ServiceImpl implements Service {

@Autowired
public ApplicationProperties applicationProperties;

}

正如您所注意到的,前缀将是 spring.app 然后 spring-boot 将匹配属性前缀并查找 serviceNameversion 和值将被注入(inject)。

关于java - Spring Autowiring Autowiring 的bean中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30080337/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com