我正在使用 Springboot 开发一个 Web 服务器,我需要为其添加一些自定义配置。所以我将配置放入 resources/application.properties
中,如下所示:
apple.price=1
在某些功能中我需要获取配置。
class MyObj {
@Value
private int applePrice;
}
这不起作用,因为 MyObj
不是由 Springboot 管理的。
但是我无法为 MyObj
类添加任何注释,例如 @Component
,因为 MyObj
的对象是手动初始化的:MyObj obj = new MyObj();
看来我需要在非托管对象中获取注入(inject)的bean。
我是 Springboot 新手,请帮助我解决这个问题。
最佳答案
您需要创建一个 Spring 托管 bean 并将属性注入(inject)到该 bean 中。然后您可以将其作为构造函数参数传递给您的 MyObj
。
示例如下:
@Component // will be instantiated by Spring as a singleton bean
public class MyObjFactory {
@Value("${apple.price}")
private int applePrice;
public MyObj newMyObject() {
return new MyObj(applePrice);
}
}
请记住,您不应使用 new
运算符手动创建 MyObjFactory
。 Spring 在上下文创建期间实例化标记为 @Component
的类。所以你需要将该工厂注入(inject)到你想要使用它的地方。您可以在这里阅读更多相关信息:https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html
关于java - 如何获取公共(public)类中注入(inject)的bean的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76357949/