如何在 spring 中的静态 class 中注入静态字段

How to inject static field in static class in spring

我有服务 MyStaticService,它使用 DAO 进行一些计算。 如何将 MyDao 对象注入 class 字段? 我试图用 @Autowired 实现 setter,但是当我调用 doCalculations(..) 时,DAO 是 null。我做错了什么?

 public class MyStaticService
     {
        private static MyDao dao;

        public static int doCalculations(..){
         dao.doSmth()
         // omitted
       }
    }

您需要初始化您的对象以便访问 MyDao() class 的函数,如下所示:

    dao = new MyDao();

或在您创建实例时

    private static MyDao dao = new MyDao();

否则它将始终显示为空

首先,你不能自动装配 Spring beans inside classes that are not managed by Spring.

因此在您的示例中,即使您的 DAO 是一个有效的 Spring 托管 bean,您也不能将它注入到您的 MyStaticService 中。当然,它将始终为空。如果您的静态服务 class 本身不是 Spring Component

,Spring 将无法知道要扫描和注入哪些依赖项

Spring 依赖注入仅适用于 class 由 Spring IOC 容器管理的 es。

您的 StaticService class 更适合单例 Class,因此将其声明为 Spring 组件没有任何坏处。

@Component
public class MyStaticService

然后你可以自动装配你的 DAO classes.

服务 classes 理想情况下应该是具有其他单例依赖项(如 DAO)的单例。