[英]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.