java - 如何获取公共(public)类中注入(inject)的bean的值

标签 java spring-boot spring-annotations

我正在使用 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/

相关文章:

java - 我可以获取另一个文件的目录吗?

java - 如何检查2*2数组的所有元素是否为真?

spring-boot - 将测试容器与另一个数据库驱动程序一起使用

java - SpringBoot 1.3.0 支持 hibernate 5?

java - 是否可以保证@PostConstruct方法的调用顺序?

java - 获取文档 Cloud Firestore 中集合的所有文档

java - 复制 volatile ArrayList 的元素

java - Spring Boot - 配置文件 (application.properties) 定义 HTTP 请求的 baseUrl

java - 如何使用注释设置模型中列的默认值

java - Spring 将 POJO 中的值加载到 App 上下文中