创建一个工具类SpringContextsUtil ,通过实现Spring中的ApplicationContextAware接口,在applicationContext.xml中注入bean后Spring会自动调用setApplicationContext方法。此时我们就可以获取到Spring context。

public class SpringContextsUtil implements ApplicationContextAware{private static ApplicationContext applicationContext;    //Spring应用上下文环境   /*** 实现ApplicationContextAware接口的回调方法,设置上下文环境  * @param applicationContext* @throws BeansException*/public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringContextsUtil.applicationContext = applicationContext;}/*** @return ApplicationContext*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 获取对象  * @param name* @return Object 一个以所给名字注册的bean的实例* @throws BeansException*/public static Object getBean(String name) throws BeansException {return applicationContext.getBean(name);}/*** 获取类型为requiredType的对象  * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)  * @param name       bean注册名* @param requiredType 返回对象类型* @return Object 返回requiredType类型对象* @throws BeansException*/public static Object getBean(String name, Class requiredType) throws BeansException {return applicationContext.getBean(name, requiredType);}/*** 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true  * @param name* @return boolean*/public static boolean containsBean(String name) {return applicationContext.containsBean(name);}/*** 判断以给定名字注册的bean定义是一个singleton还是一个prototype。  * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)  * @param name* @return boolean* @throws NoSuchBeanDefinitionException*/public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {return applicationContext.isSingleton(name);}/*** @param name* @return Class 注册对象的类型* @throws NoSuchBeanDefinitionException*/public static Class getType(String name) throws NoSuchBeanDefinitionException {return applicationContext.getType(name);}/*** 如果给定的bean名字在bean定义中有别名,则返回这些别名  * @param name* @return* @throws NoSuchBeanDefinitionException*/public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {return applicationContext.getAliases(name);}
}

调用方法:

// 获取inspectionUtil beaninspectionUtil = (InspectionUtil) SpringContextUtil.getBean("inspectionUtil");

注:

1、使用时会出现无法获取applicationContext,并抛出NullPointerException。 
原因:使用此方法必须在spring applicationContext.xml中注入bean。否则spring无法自动调用setApplicationContext。如下

<bean id="springContextsUtil" class="com.sinosoft.sepmis.util.SpringContextsUtil" ></bean>

2、如果注入后仍然出现这个问题。 
则修改 中的default-lazy-init=“false”。 
或者是修改bean注入属性

<bean id="springContextsUtil" class="com.sinosoft.sepmis.util.SpringContextsUtil" lazy-init="false"></bean>

转载于:https://blog.51cto.com/breezewindlw/1688375

spring获取bean的方案相关推荐

  1. spring获取Bean报错

    错误: org.springframework.beans.factory.BeanNotOfRequiredTypeException:Bean named 'orderServiceImpl' i ...

  2. java 获取bean_spring如何获取bean的6种方法,你知道几个?

    spring获取bean的6种方法 Bean工厂(com.springframework.beans.factory.BeanFactory)是Spring框架最核心的接口,它提供了高级IoC的配置机 ...

  3. Spring容器中获取Bean实例的七种方式(附实战源码)

    目录 写作说明 一:写作原因 二:源码出处 实现方式 一:使用BeanFactory直接获取(不推荐) 二:在初始化时保存ApplicationContext对象 三:继承自抽象类Applicatio ...

  4. Spring容器中获取 Bean 实例的七种方式

    点击关注公众号,利用碎片时间学习 说明 一.写作原因 首先解释一下写这篇博文的原因,因为在使用spring框架的过程中获取bean是非常常见的操作,但是网上非常的博文大多承自一家之言,因此很多可操作性 ...

  5. FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean

    前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...

  6. Spring读取配置文件,获取bean的几种方式

    Spring读取配置文件,获取bean的几种方式 方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemX ...

  7. Spring Boot 获取 Bean 的 3 种方式!还有谁不会?

    作者 | chilx 来源 | https://blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 方式一 注解@PostC ...

  8. Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式

    Spring获取ApplicationContext方式 我自己常用的方法: 读取一个文件1 //创建Spring容器 2 ApplicationContext ctx = new ClassPath ...

  9. Spring的工具类,方便在非spring管理环境中获取bean

    场景 在SpringBoot的后台项目中,如果想要引入并且调用某个bean,可以直接通过注解的方式. 比如在单元测试中引入某业务的Controller @RunWith(SpringJUnit4Cla ...

最新文章

  1. 求职面试的十大错误,你犯过吗? | 每日趣闻
  2. django mysql内存泄漏_Django的:使内存的关系,而不保存到数据库
  3. Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理)
  4. Spring事务管理(三)-PlatformmTransactionManager解析和事务传播方式原理
  5. Java 集合容器篇面试题(上)-王者笔记《收藏版》
  6. iptables之NAT
  7. 接口文档生成工具apipost
  8. python 每月每周_R-Python:获取每月,每周的索引点
  9. 四十五.加密与解密 AIDE入侵检测系统 扫描与抓包
  10. 【云驻共创】华为云数据库之大数据入门与应用(全)
  11. Rancher管理k8s集群
  12. IBM李永辉:从人工智能到大数据的终点
  13. 2018程序员拜年的奇思妙想,涨姿势了
  14. SQLite3在IOS中的用法
  15. 一个挑战 ViT,MLP-Mixer 的新模型 ConvMixer:Patches Are All You Need? [Under Review ICLR 2022]
  16. 爬虫、知识图谱和开源情报分析01
  17. 看PDF时点击书签页面变小的解决方法
  18. 不同鸟的叫声Java编程_飞扬小鸟java版(3种版本一次下载)
  19. php鲜花销售理论意义,鲜花销售系统(论文+源代码)论文有用
  20. js设置、获取缓存方式

热门文章

  1. linux 系统装中文输入法 fcitx
  2. 硬盘知识大杂烩(四)
  3. C#拾遗系列(3):构造函数
  4. 深度高能粒子对撞追踪:Kaggle TrackML粒子追踪挑战赛亚军访谈
  5. MVC之Model转Json
  6. .NET Core 2.0 Preview 2为开发人员带来改进
  7. 转:D3DXVec3TransformNormal() 与 3DXVec3TransformCoord() 的区别
  8. 结合项目实例 回顾传统设计模式(九)迭代器模式
  9. Oracle TNS 不能启动
  10. 【S1官方核心】18128核心纯净雅黑H大全力打造的1.9精品