spring获取已实例化IOC容器中的bean
如果希望在我们的项目中任何位置都能拿到同一个ApplicationContext来获取IOC容器中的资源,就要让Spring将上下文环境填充到我们能获取的地方。
自定义一个工具类,实现自BeanFactoryAware接口,接口的方法是setBeanFactory,我们实现它,并让其为我们服务,因为Spring在load自己的时候会将上下文环境填充进来。
import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.stereotype.Service; /** * 获取Spring容器中Bean实例的工具类 */ @Service public class SpringBeanUtils implements BeanFactoryAware { private static BeanFactory beanFactory; /** * 注入sring的BeanFactory实例 */ @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { SpringBeanUtils.beanFactory = beanFactory; } /** * 根据bean的名称获取相应类型的对象 * * @param beanName bean的名称 * @return Object类型的对象 */ public static Object getBean(String beanName) { return beanFactory.getBean(beanName); } /** * 根据bean的Class获取相应类型的对象 * * @param beanName bean的名称 * @return Object类型的对象 */ public static <T> T getBean(Class<T> clazz) { return beanFactory.getBean(clazz); } }
在web开发中,还有一种更简单的方法:
/** * 获取Spring容器中Bean实例的工具类 */ public class SpringBeanUtils { /** * 根据bean的名称获取相应类型的对象,使用泛型,获得结果后,不需要强制转换为相应的类型 * 此方法适用在web开发中获取spring的bean * @param clazz bean的类型,使用泛型 * @return T类型的对象 */ public static <T> T getBeanByGeneric(Class<T> clazz) { WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); T bean = wac.getBean(clazz); return bean; } }
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦