@Configuration类,空@Value

时间:2018-04-26 09:36:19

标签: 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"

在控制器中我实例化配置:

@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

1 个答案:

答案 0 :(得分:1)

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

<强>小结

Spring是依赖注入框架,意味着如果你需要一些依赖,它是由容器提供给你的,你不应该创建它。这些依赖项通常是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