gpt4 book ai didi

java - 带有空@Value的@Configuration类

转载 作者:行者123 更新时间:2023-11-30 06:12:00 25 4
gpt4 key购买 nike

我有一个带有外部配置的 Maven Spring Boot 应用程序。

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>

我有一个带有@PropertySource注释的配置类,它同时使用@ValueEnvironment:

@Configuration
@PropertySource("file:/etc/koshka/application.properties")
public class Config
{
@Autowired
private Environment env;

@Bean
public static PropertySourcesPlaceholderConfigurer configurer() {
return new PropertySourcesPlaceholderConfigurer();
}

@Value("${socmess.pass}")
private String pass;

public String getUser() {
return env.getProperty("socmess.user");
}

public String getPass() {
return pass;
}
}

简而言之,我只需要 @Value,但我也测试了 Environment 选项。

我在适当的文件夹中有配置文件:

$ cat /etc/koshka/application.properties 
socmess.user="testuser"
socmess.pass="testpass"

在 Controller 中我正在实例化配置:

@RestController
public class Sender {
private final Logger logger;

public Sender()
{
logger = (Logger)LogManager.getLogger("KoshkaBot");
}

@GetMapping("/vk")
@CrossOrigin(origins = "*")
public ResponseEntity<String> vk(
@RequestParam(value="username") String username,
@RequestParam(value="password") String password
) {
Config conf = new Config();

logger.info(conf.getUser());
logger.info(conf.getPass());

return ResponseEntity.ok().body("OK");
}
}

不幸的是,我在日志中看到null

最佳答案

不要创建new Config()对象。这个由 spring 容器管理,因此您最多应该注入(inject)它。

回顾

Spring 是依赖注入(inject)框架,这意味着如果您需要一些依赖项,它是由容器提供给您的,您不应该创建它。这些依赖项通常是 spring bean,即 spring 知道如何创建和管理的对象。

返回我们@Configuration 是 Spring 用于通过 @Bean 注释来定义 bean 的注释,稍后其他组件可以使用 @Inject 注释来使用该注释。我要做的就是定义一个 pojo,如下所示:

public class User(){
private String username;
private String password;

//getters,setters etc ...
}

然后在 Config 类中定义 bean,如下所示:

@Bean
public User getUser(){
//..load user and password
return new User(user, password);
}

最后,当您需要使用用户时,您可以执行以下操作:

@Inject User user;
//now the properties will be not-null

关于java - 带有空@Value的@Configuration类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50039635/

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