[英]Java spring @Value annotation
我有一个带有TokenProvider类的Spring Boot应用程序,我从application.properties获取一些令牌。 在另一个控制器类TestController中,我需要创建一个对象new TokenProvider并检索该值。 它给了我空值。 为什么它不起作用?
PS:如果我在TestController中注入TokenProvider(使用@Autowired JwtTokenProvider tokenProvider;)它可以工作。
为什么我不能在没有注入的情况下检索令牌?
@Component
public class JwtTokenProvider {
private static Logger logger = LoggerFactory.getLogger(JwtTokenProvider.class);
@Value("${app.jwtSecret}")
private String jwtSecret;
public String getJwtSecret() {
return jwtSecret;
}
}
@RestController
@RequestMapping("/test")
public class TestController {
// @Autowired
// JwtTokenProvider tokenProvider;
@RequestMapping(value = "/get_propertie")
public String getPropertie() {
JwtTokenProvider jwt = new JwtTokenProvider();
String res = "jwt" + jwt.getJwtSecret();
return res;
}
}
在使用new
创建JwtTokenProvider
情况下,它不是由Spring创建的,并且所有注释(如@Value
基本上都被忽略 - 这就是Spring的工作方式。 你可以做的是在适当的Java @Configuration
类中创建JwtTokenProvider
,提供@Value String token
参数
@Configuration
public class TokenConfig {
@Bean
public JwtTokenProvider jwtTokenProvider(@Value("${app.jwtSecret}") token) {
return new JwtTokenProvider(token); // or some setter depends on what the class provide
}
}
但仍然 - 你需要使用Spring依赖注入机制来让@Value
工作
请参阅https://baledung.com/spring-value-annotation
您可以使用@Value批注将值注入Spring管理的bean中的字段。
如果您的bean不是@Autowired,则Spring无法注入该值。
如果您不想使用@Value批注,则始终可以使用Java Properties类(使用.getProperty方法)来检索您的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.