如何在Spring中静态类中注入静态字段

时间:2018-03-26 17:52:56

标签: java spring static inject

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

 public class MyStaticService
     {
        private static MyDao dao;

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

2 个答案:

答案 0 :(得分:0)

首先,你不能在不受Spring管理的类中自动装配Spring bean。

因此,在您的示例中,即使您的DAO是有效的Spring托管bean,也无法在MyStaticService中注入它。当然它总是为空。如果您的静态服务类本身不是Spring Component

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

Spring依赖注入只适用于由Spring IOC容器管理的类。

你的StaticService类更适合成为Singleton类,因此将它声明为Spring组件没有任何害处。

@Component
public class MyStaticService

然后你可以自动装配你的DAO课程。

理想情况下,服务类应该是具有其他单例依赖关系的单例,例如你的DAO。

答案 1 :(得分:-1)

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

    dao = new MyDao();

或在您创建实例时

    private static MyDao dao = new MyDao();

否则它将始终显示为空