簡體   English   中英

Java spring @Value注釋

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM