spring获取bean的方案
创建一个工具类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的方案相关推荐
- spring获取Bean报错
错误: org.springframework.beans.factory.BeanNotOfRequiredTypeException:Bean named 'orderServiceImpl' i ...
- java 获取bean_spring如何获取bean的6种方法,你知道几个?
spring获取bean的6种方法 Bean工厂(com.springframework.beans.factory.BeanFactory)是Spring框架最核心的接口,它提供了高级IoC的配置机 ...
- Spring容器中获取Bean实例的七种方式(附实战源码)
目录 写作说明 一:写作原因 二:源码出处 实现方式 一:使用BeanFactory直接获取(不推荐) 二:在初始化时保存ApplicationContext对象 三:继承自抽象类Applicatio ...
- Spring容器中获取 Bean 实例的七种方式
点击关注公众号,利用碎片时间学习 说明 一.写作原因 首先解释一下写这篇博文的原因,因为在使用spring框架的过程中获取bean是非常常见的操作,但是网上非常的博文大多承自一家之言,因此很多可操作性 ...
- FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean
前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...
- Spring读取配置文件,获取bean的几种方式
Spring读取配置文件,获取bean的几种方式 方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemX ...
- Spring Boot 获取 Bean 的 3 种方式!还有谁不会?
作者 | chilx 来源 | https://blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 方式一 注解@PostC ...
- Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式
Spring获取ApplicationContext方式 我自己常用的方法: 读取一个文件1 //创建Spring容器 2 ApplicationContext ctx = new ClassPath ...
- Spring的工具类,方便在非spring管理环境中获取bean
场景 在SpringBoot的后台项目中,如果想要引入并且调用某个bean,可以直接通过注解的方式. 比如在单元测试中引入某业务的Controller @RunWith(SpringJUnit4Cla ...
最新文章
- 求职面试的十大错误,你犯过吗? | 每日趣闻
- django mysql内存泄漏_Django的:使内存的关系,而不保存到数据库
- Cocos2d-x 3.1.1 Lua演示样例 ActionManagerTest(动作管理)
- Spring事务管理(三)-PlatformmTransactionManager解析和事务传播方式原理
- Java 集合容器篇面试题(上)-王者笔记《收藏版》
- iptables之NAT
- 接口文档生成工具apipost
- python 每月每周_R-Python:获取每月,每周的索引点
- 四十五.加密与解密 AIDE入侵检测系统 扫描与抓包
- 【云驻共创】华为云数据库之大数据入门与应用(全)
- Rancher管理k8s集群
- IBM李永辉:从人工智能到大数据的终点
- 2018程序员拜年的奇思妙想,涨姿势了
- SQLite3在IOS中的用法
- 一个挑战 ViT,MLP-Mixer 的新模型 ConvMixer:Patches Are All You Need? [Under Review ICLR 2022]
- 爬虫、知识图谱和开源情报分析01
- 看PDF时点击书签页面变小的解决方法
- 不同鸟的叫声Java编程_飞扬小鸟java版(3种版本一次下载)
- php鲜花销售理论意义,鲜花销售系统(论文+源代码)论文有用
- js设置、获取缓存方式
热门文章
- linux 系统装中文输入法 fcitx
- 硬盘知识大杂烩(四)
- C#拾遗系列(3):构造函数
- 深度高能粒子对撞追踪:Kaggle TrackML粒子追踪挑战赛亚军访谈
- MVC之Model转Json
- .NET Core 2.0 Preview 2为开发人员带来改进
- 转:D3DXVec3TransformNormal() 与 3DXVec3TransformCoord() 的区别
- 结合项目实例 回顾传统设计模式(九)迭代器模式
- Oracle TNS 不能启动
- 【S1官方核心】18128核心纯净雅黑H大全力打造的1.9精品