你可以通过静态引用访问@Autowire'd字段吗?

问题描述 投票:0回答:1

假设您有以下设置:

public class Producer {

    public Product produce() { /* Creates some product */ }
}

@Service
public class ProductService {

    @Autowired
    private Producer producer;

    public Product produce() { producer.produce(); }
}

public class Factory {

    private static ProductService productService = new ProductService();

    public static Product produce() { productService.produce(); }
}

当我调用

Factory.produce()
时,我得到一个
NullPointerException
,因为
producer
为空。由于
producer
本身不是静态字段,我希望通过这种方式设置它,我可以在静态上下文中使用 Springs 依赖注入。我是否犯了一个错误,或者这根本不可能?

对于上下文:在我的实际应用程序中,

Factory
拥有多个服务,而每个服务又拥有多个生产者。我选择了这种结构,所以我的应用程序的其余部分只需要访问
Factory
,其背后的所有复杂性都被它抽象了。

java spring dependency-injection autowired
1个回答
0
投票

只需用

Factory
 注释 
@Autowired

的构造函数即可
@Component
public class Factory {

    private static ProductService productService;

    @Autowired
    public Factory(ProductService productService) {
        Factory.productService = productService;
    }

    public static Product produce() { productService.produce(); }
}
© www.soinside.com 2019 - 2024. All rights reserved.