java - 带有空@Value的@Configuration类

标签 java spring javabeans

我有一个带有外部配置的 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/

相关文章:

java - spring hibernate 异步任务问题 No Session found for current thread

java - Bean 验证仅适用于 Spring 中的 Controller 方法?

java - NoSuchBeanDefinition异常 : No qualifying bean of type 'org.springframework.mail.MailSender'

java - Spring不调用setter

java - TextureRegions setRegion 方法 libgdx java

java - 如何在java swing中触发keyReleased事件

java - Spring Boot 的默认 session 存储是什么?

java - 我可以使用 iText 重置忘记的所有者密码吗?

java - JTable 中的问题组合框

java - 测试未执行 - JUnit 5 编程 + mvn exec