怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean
BeanFactory接口
Interface BeanFactory
getBean
<T> T getBean(String name,Class<T> requiredType)throws BeansException上面是Apring的bean工厂的接口(顾名思议 拿到Spring的Bean) 下面看它的一个实现类
ClassPathXmlApplicationContext(BeanFactory接口的一个实现类)
public ClassPathXmlApplicationContext(String configLocation)throws BeansException
- Create a new ClassPathXmlApplicationContext, loading the definitions from the given XML file and automatically refreshing the context.
- 构造方法的参数 是Spring Bean配置的xml路径(src下面的路径)
- 然后 我们就可以通过new 一个ClassPathXmlApplicationContext 然后调用BeanFactory的getBean()方法获取Spring管理的Bean了
上面只是通过API说了Spring获取Bean的原理,然而工作中:
在平时代码中 我们都是通过 @Autowired 来引入一个对象。也就是Spring的依赖注入。
不过使用依赖注入需要满足两个条件,注入类 和被注入类 都需要交给Spring去管理,也就是需要在Spring中配置Bean
但是开发中,有些工具类(或者实体类)是不需要在Spring中配置的,如果工具类里面 想引用Spring配置的Bean 应该怎么办
解决办法
自己用的时候主动去new。 不可取 自己new的类 没有交给Spring去管理,如果类中 用到了Spring的一些注解功能 完全失效
也不可能像上面API中 去通过XML拿(IO操作很费时间)
工作中使用ApplicationContextAware接口
先通过setApplicationContext获取Spring的上下文
在通过applicationContext去获取Spring管理的Bean
写一个SpringContextUtils专门去获取Spring管理的Bean。也就是说 被注入对象 可以不交给Spring管理,就可以获取Spring管理的Bean
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware;public class SpringContextUtils implements ApplicationContextAware { private static ApplicationContext applicationContext;/*** 如果实现了ApplicationContextAware接口,在Bean的实例化时会自动调用setApplicationContext()方法*/@Overridepublic void setApplicationContext(ApplicationContext applicationContext)throws BeansException {SpringContextUtils.applicationContext = applicationContext;}public static <T> T getBean(Class<T> clazz) {return applicationContext.getBean(clazz);}}
注意点
SpringContextUtils必须在Spring中配置bean(也就是SpringContextUtils必须交给Spring管理) 不然 在Bean的实例化时不会自动调用setApplicationContext()方法
SpringContextUtils中的ApplicationContext需要是static的
这样 我们就可在任何代码任何地方任何时候中取出ApplicaitonContext. 从而获取Spring管理的Bean
转载于:https://www.cnblogs.com/ssskkk/p/9178338.html
怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean相关推荐
- spring的IOC原理,容器管理的bean类型、bean的生命周期
1.什么是IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 (2)使用 IOC 目的:为了耦合度降低 为什么IOC可以极大的降低耦合度? (1)原始版:一般我们想使 ...
- spring生命周期_理解Spring应用上下文生命周期
Spring应用上下文启动准备阶段 `BeanFactory`创建阶段 `BeanFactory`准备阶段 `BeanFactory`后置处理阶段 `AnnotationConfigServletWe ...
- [Spring实战系列](5)Spring应用上下文
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50618337 下面是Spring-Hello ...
- java获取当前周一_Java互联网架构-Spring IOC源码分析
欢迎关注头条号:java小马哥 周一至周日下午三点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 源码介绍之前,看几个问题: Bean的承载对象是什么? Bean的定义如何存储的? B ...
- Spring mvc 上下文初始化过程
为什么80%的码农都做不了架构师?>>> 在软件开发的中,如果某些特性的使用比较普遍,那么这些特性往往可以作为平台特性来实现,通过对这些平台特性进行有效的封装,使其向其他应用开 ...
- Spring MVC上下文父子容器
2019独角兽企业重金招聘Python工程师标准>>> Spring MVC上下文父子容器 博客分类: java spring 在Spring MVC的启动依赖Spring框架,有时 ...
- SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解
构建分布式系统非常复杂且容易出错.Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序.Spring Cloud构建于Spring Bo ...
- Spring容器和Spring应用上下文的理解
1. 什么是Spring容器?作用是什么? 1.1 什么是Spring容器? Spring容器称为IOC容器,即:控制反转 应用程序里不用再过问对象的创建和管理对象之间的依赖关系了,都让IOC容器给代 ...
- Spring父子上下文的使用案例
Spring父子上下文的使用案例 一.背景 二.需求 三.实现步骤 1.基础代码编写 2.测试结果 四.小彩蛋 五.完整代码 一.背景 最近在看在使用Spring Cloud的时候发现,当我们通过Fe ...
最新文章
- GitHub详解(GitHub for Windows)
- ListT.Find用法学习
- 2的次幂表示【递归算法训练】
- secureCRT及secureFX安装注册和secureFX中出现中文乱码的处理方式
- Lesson 02amp;03 for Plotting in R for Biologists
- 程序员代码面试指南 算法与数据结构 大厂经典代码面试题
- 论文笔记(1) B4: Experience with a Globally-Deployed Software Defined WAN
- 删除树莓派默认密码的SSH警告
- 【优化系列】VS与YASM的集成使用
- 计算机win7如何连接wifi网络,win7台式电脑怎么连接wifi win7台式电脑如何设置wifi...
- 机器人行业疫情之下的“危”与“机”
- is 简写 缩写_为什么e.g.是for example的缩写?它和i.e.是什么关系?
- 守护神 Supervisor
- c语言遍历算法的头文件,图优先遍历算法(C语言版).doc
- 计算机软件专业的学术道德,遵守学术规范 恪守学术道德--计算机工程学院举行2019届毕业设计(论文)动员会...
- 华东师范大学计算机组成原理教材,华东师范大学计算机组成原理.ppt
- AOSP ~ Logcat Chatty 行过期
- php-gtk2怎么用,PHP+GTK2 初体验,简单计算器客户端
- QT开发中常用的快捷键(Windows+QT)
- 中心透视投影和鱼眼投影的区别(Central perspective projection vs. fisheye projection)
热门文章
- 马斯克的“大脑改造计划”,还需要点亮哪些技能树?
- linux文件系统中文件基本权限,Linux文件权限基本属性图文详解
- 网络教育计算机二级题库2021,2021计算机二级office
- mysql的dockerfile_Dockerfile构建MySQL
- mysql concat例子_浅析MySQL中concat以及group_concat的使用
- Java---定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)
- mysql 5.6 主从同步配置_Mysql 5.6主从同步配置
- command not found: ls_内饰更加奢华 新款雷克萨斯LS将于广州车展亮相
- 根据遍历序列画二叉树
- 015_视图(Views)