如何在 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)的单例。
我有服务 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 依赖注入仅适用于 class 由 Spring IOC 容器管理的 es。
您的 StaticService class 更适合单例 Class,因此将其声明为 Spring 组件没有任何坏处。
@Component
public class MyStaticService
然后你可以自动装配你的 DAO classes.
服务 classes 理想情况下应该是具有其他单例依赖项(如 DAO)的单例。