spring getbean 方法分析
spring 缺省:
- 1.spring用DefaultListableBeanFactory.preInstantiateSingletons()建立bean实例
- 2.缺省采用单例模式
在最近的项目中,有个地方我们不得不实用getBean的方法,自己从Spring context中获取bean进行数据库操作。
方法一(效率低,极易出现bug,不推荐使用):
刚刚开始的时候,我们使用这中方式,但是在应用过程中发现此方式效率低下,而且极易出现bug。
在我们系统中会生成ehcache_auto_created_时间戳文件夹,
String[] xmlCfg = new String[] {"classpath:/spring/applicationContext-service.xml","classpath:/spring/applicationContext-util.xml","classpath:/spring/applicationContext.xml"};
ApplicationContext context = new FileSystemXmlApplicationContext(xmlCfg);
// 获取inspectionUtil bean
inspectionUtil = (InspectionUtil) context.getBean("inspectionUtil");
所以我google了一下,改用其他方法。
方法二(效率高,灵活性高,可复用,推荐使用):
创建一个工具类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 bean
inspectionUtil = (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">
转载于:https://www.cnblogs.com/a757956132/p/4353771.html
spring getbean 方法分析相关推荐
- Spring AOP方法分析
Spring AOP方法分析 此示例显示如何配置Spring AOP方法概要分析.我们可以在任何服务(或其他)类中使用Spring AOP和任何方法,而无需在任何服务类中编写任何一行分析代码.面向方面 ...
- spring getBean()方法解析概述
1.getBean(beanName) 整体概述 1.transformedBeanName(name) name可能是别名,将别名(alias)解析成真正的beanName 截取&beanN ...
- java spring getbean_spring getbean 方法分析(很实用!)
在最近的项目中,有个地方我们不得不实用getBean的方法,自己从Spring context中获取bean进行数据库操作. 方法一(效率低,极易出现bug,不推荐使用): 刚刚开始的时候,我们使用这 ...
- spring getbean 方法
在网上找到一篇比较好的spring gebean的方法文章 创建一个工具类SpringContextsUtil ,通过实现Spring中的ApplicationContextAware接口,在appl ...
- Spring refresh 方法分析之一
三哥 内容来自[自学星球] 欢迎大家来了解我的星球,和星主(也就是我)一起学习 Java ,深入 Java 体系中的所有技术.我给自己定的时间是一年,无论结果如何,必定能给星球中的各位带来点东西. 想 ...
- Spring IoC 源码系列(五)getBean 流程分析
一.FactoryBean 用法讲解 在分析源码流程之前,我们先来看一下 FactoryBean,乍一看这家伙和 BeanFactory 很像,它们都可以用来获取 bean 对象,简单来说 Facto ...
- Spring源码分析系列——bean创建过程分析(三)——工厂方法创建bean
前言 spring创建bean的方式 测试代码准备 createBeanInstance()方法分析 instantiateUsingFactoryMethod()方法分析 总结 spring创建be ...
- 详解Spring中getBean()方法
我们日常会经常使用getBean()方法从spring容器中获取我们需要的bean.那么,getBean()方法是怎么一步步完成从spring容器中获取bean的呢? 下面我们就通过源码分析一下. 一 ...
- Spring源码分析之getBean主流程分析
当我们通过向Spring容器获取某个bean的时候,总是调用Spring中重载的各种getBean方法.那么,getBean中的流程是什么样的? 通过本文,你将对getBean方法的主流程有一个详细的 ...
最新文章
- Ubuntu安装MongoDB
- 3d打印主要的切片参数类型_3D打印机教程 | 模型切片参数设置教程
- 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程
- EasyUI –tree、combotree学习总结
- python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...
- .Net Core 3.0依赖注入替换 Autofac
- devops的重要性_为什么反馈而不是指标对DevOps至关重要
- wav格式的音频文件 16位转化成8位的
- nginx日志切割脚本
- linux系统访问sftp,Linux上设置用户通过SFTP访问目录的权限的方法
- MNIST 数据集下载 与 保存为图片格式
- JPGPNG图片压缩java实现
- AR实战开源项目——Miku和“极乐净土”
- 谷歌拼音输入法之初用
- 用聚宽量化炒股-5获取数据函数-8)获取概念成分股代码函数get_concept_stocks、查询股票所属概念板块函数get_concept()
- 检查等高线矛盾lisp_依仁测绘工具V1.0 整理了一个配合cass绘图的程序-依仁测绘工具 联合开发网 - pudn.com...
- FANUC机器人有关动作速度倍率的相关系统变量-解释说明
- 将实际环节都拆成了理论公式后,做好抽奖活动其实不难!
- springboot启动报org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean..
- lin通讯从节点同步间隔场_LIN模块介绍
热门文章
- druid连接池mysql5.7_Spring Boot 使用Druid连接池整合Mybatis-Plus连接Mysql数据库
- 50兆 svg 文件超过_中山兆驰产业园项目开工,预计竣工投产时间为…
- 学习编程做笔记的软件_可以在图片上做笔记的软件
- 002_SpringBoot整合Servlet
- 002_jQuery语法
- 024_html列表
- python爬虫论文摘要怎么写_Python爬虫基础教学(写给入门的新手)
- java中抽象类和接口的作用与区别
- c# redis hashid如何设置过期时间_Redis数据库实现原理(划重点)
- Java之线程安全的几种方式