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、 openharmony
-
9、 golang