为了账号安全,请及时绑定邮箱和手机立即绑定

自动装配不适用于非弹簧单例

自动装配不适用于非弹簧单例

收到一只叮咚 2023-12-13 17:18:42
我有一个非 spring public class MySingleton,它通过 Spring 注入了 MyBattis Mapper,如下所示:public class MySingleton{    @Autowired    MyMapper myMapper    private List<MyPojo> myList;    private MySingleton(){       myList = myMapper.getMyList();    }    public static MySingleton getInstance(){                if(instance == null){//first check            synchronized (MySingleton.class) {                if(instance == null){// second check                    instance = new MySingleton();                                   }                   }                   }        return instance;    }}myMapper从未初始化,它在构造函数中始终为 null。我已经测试过该 bean 是在我的 Singleton 之前声明和创建的,我也尝试过Configurable注释,但没有任何作用。谁能帮我?
查看完整描述

4 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

为了在非托管类上检索托管 spring bean,我编写了一个类来执行您想要执行的操作。


@Configuration

public class ApplicationContextProvider {


    private static ApplicationContext context;


    public ApplicationContextProvider(ApplicationContext context){

        ApplicationContextProvider.context = context;

    }


    public static ApplicationContext getContext() {

        if (Objects.isNull(ApplicationContextProvider.context)) {

            throw new IllegalStateException("Context isn't available!");

        }

        return ApplicationContextProvider.context;

    }


    public static <E> E getBean(Class<E> bean){

        return getContext().getBean(bean);

    }

}

要获得托管 bean,只需ApplicationContextProvider.getBean(MyMapper.class);


查看完整回答
反对 回复 2023-12-13
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您可以在非托管类中实现ApplicationContextAware接口。这将导致应用程序上下文通过 setter 注入,并允许您访问 Spring 生态系统的其余部分。

然后你就可以打电话了applicationContext.getBean(MyMapper.class);


查看完整回答
反对 回复 2023-12-13
?
慕斯王

TA贡献1864条经验 获得超2个赞

对MyMapper类进行@Component注解。这意味着当使用基于注解的配置和类路径扫描时,Spring框架将自动检测这些类进行依赖注入。



查看完整回答
反对 回复 2023-12-13
?
湖上湖

TA贡献2003条经验 获得超2个赞

MyMapper 这个类没有在 IOC 中注册为 bean。首先使用@Component或XML文件将MyMapper类注册为bean然后运行



查看完整回答
反对 回复 2023-12-13
  • 4 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信