gpt4 book ai didi

Java spring @Value注解

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:44 26 4
gpt4 key购买 nike

我有一个带有 TokenProvider 类的 Spring Boot 应用程序,我从 application.properties 中获取了一些 token 。在另一个 Controller 类 TestController 中,我需要创建一个对象 new TokenProvider 并检索值。它给了我空值。为什么它不起作用?

PS:如果我在 TestController 中注入(inject) TokenProvider(使用 @Autowired JwtTokenProvider tokenProvider; )它会起作用。

为什么我不注入(inject)就无法检索 token ?

@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 依赖注入(inject)机制来让 @Value 工作

关于Java spring @Value注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com