当前位置: 首页 > 后端技术 > Java

如何在非Spring容器管理的类中注入-获取Spring容器中的bean?

时间:2023-04-02 10:30:14 Java

前言:本文仅供新手阅读,大佬们切忌。我们适合使用Spring来开发程序。Spring提供了一种非常方便的对象管理方式,即IOC,同时也提供了一种非常友好的边界对象注入方式DI。只要是Spring容器管理的类,就可以使用@Resource或者@Autowired注解注入其他Spring容器管理的类。Spring容器管理的类有哪些?只要叫Bean的类就是Spring容器管理的类即可。不明白的可以看看这篇短文:非Spring管理的类中几种方式将Bean交给Spring容器管理应该怎么做?有时候我们只是需要在非Spring托管的类中使用bean,怎么办?“不可能,稀有”“一般碰不得”很多新人可能会这么想,但是!让我告诉你,这将在许多情况下使用。比如我的文章:踩坑的WebSocket实现类中不能使用@Autowired注入对象解决方案。我们定义了一个上下文类。Spring扫描完所有bean后,我们使用该类实现ApplicationContextAware接口,重写setApplicationContext方法,拿到ApplicationContext数据后,放到static属性中。packagecn.donglifeng.shop.common.context;导入org.springframework.beans.BeansException;导入org.springframework.context.ApplicationContext;导入org.springframework.context.ApplicationContextAware;导入org.springframework.lang.NonNull;导入org.springframework.context.ApplicationContextAwarespringframework.stereotype.Component;/***@authorJanYork*@date2023/3/89:33*@descriptionSpringBean上下文*/@ComponentpublicclassSpringBeanContextimplementsApplicationContextAware{privatestaticApplicationContextcontext;@OverridepublicvoidsetApplicationContext(@NonNullApplicationContextapplicationContext)throwsBeansException{context=applicationContext;}/***获取上下文**@return上下文对比*/publicstaticApplicationContextgetContext(){returncontext;}/***根据beanName获取bean**@parambeanNamebean名称*@returnbean对象*/publicObjectgetBean(StringbeanName){returncontext.getBean(beanName);}/***根据beanName和类型获取bean**@parambeanNamebean名称*@paramclazzbean类型*@parambean类型*@returnbean对象*/publicTgetBean(StringbeanName,Classclazz){returncontext.getBean(beanName,clazz);}/***根据类型获取bean**@paramclazzbean类型*@parambean类型*@returnbeanobject*/publicTgetBean(Classclazz){returncontext.getBean(克拉兹);}}代码很简单,自己研究