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相关推荐

  1. spring的IOC原理,容器管理的bean类型、bean的生命周期

    1.什么是IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 (2)使用 IOC 目的:为了耦合度降低 为什么IOC可以极大的降低耦合度? (1)原始版:一般我们想使 ...

  2. spring生命周期_理解Spring应用上下文生命周期

    Spring应用上下文启动准备阶段 `BeanFactory`创建阶段 `BeanFactory`准备阶段 `BeanFactory`后置处理阶段 `AnnotationConfigServletWe ...

  3. [Spring实战系列](5)Spring应用上下文

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50618337 下面是Spring-Hello ...

  4. java获取当前周一_Java互联网架构-Spring IOC源码分析

    欢迎关注头条号:java小马哥 周一至周日下午三点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 源码介绍之前,看几个问题: Bean的承载对象是什么? Bean的定义如何存储的? B ...

  5. Spring mvc 上下文初始化过程

    为什么80%的码农都做不了架构师?>>>    在软件开发的中,如果某些特性的使用比较普遍,那么这些特性往往可以作为平台特性来实现,通过对这些平台特性进行有效的封装,使其向其他应用开 ...

  6. Spring MVC上下文父子容器

    2019独角兽企业重金招聘Python工程师标准>>> Spring MVC上下文父子容器 博客分类: java spring 在Spring MVC的启动依赖Spring框架,有时 ...

  7. SpringCloud入门之应用程序上下文服务(Spring Cloud Context)详解

    构建分布式系统非常复杂且容易出错.Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序.Spring Cloud构建于Spring Bo ...

  8. Spring容器和Spring应用上下文的理解

    1. 什么是Spring容器?作用是什么? 1.1 什么是Spring容器? Spring容器称为IOC容器,即:控制反转 应用程序里不用再过问对象的创建和管理对象之间的依赖关系了,都让IOC容器给代 ...

  9. Spring父子上下文的使用案例

    Spring父子上下文的使用案例 一.背景 二.需求 三.实现步骤 1.基础代码编写 2.测试结果 四.小彩蛋 五.完整代码 一.背景 最近在看在使用Spring Cloud的时候发现,当我们通过Fe ...

最新文章

  1. GitHub详解(GitHub for Windows)
  2. ListT.Find用法学习
  3. 2的次幂表示【递归算法训练】
  4. secureCRT及secureFX安装注册和secureFX中出现中文乱码的处理方式
  5. Lesson 02amp;03 for Plotting in R for Biologists
  6. 程序员代码面试指南 算法与数据结构 大厂经典代码面试题
  7. 论文笔记(1) B4: Experience with a Globally-Deployed Software Defined WAN
  8. 删除树莓派默认密码的SSH警告
  9. 【优化系列】VS与YASM的集成使用
  10. 计算机win7如何连接wifi网络,win7台式电脑怎么连接wifi win7台式电脑如何设置wifi...
  11. 机器人行业疫情之下的“危”与“机”
  12. is 简写 缩写_为什么e.g.是for example的缩写?它和i.e.是什么关系?
  13. 守护神 Supervisor
  14. c语言遍历算法的头文件,图优先遍历算法(C语言版).doc
  15. 计算机软件专业的学术道德,遵守学术规范 恪守学术道德--计算机工程学院举行2019届毕业设计(论文)动员会...
  16. 华东师范大学计算机组成原理教材,华东师范大学计算机组成原理.ppt
  17. AOSP ~ Logcat Chatty 行过期
  18. php-gtk2怎么用,PHP+GTK2 初体验,简单计算器客户端
  19. QT开发中常用的快捷键(Windows+QT)
  20. 中心透视投影和鱼眼投影的区别(Central perspective projection vs. fisheye projection)

热门文章

  1. 马斯克的“大脑改造计划”,还需要点亮哪些技能树?
  2. linux文件系统中文件基本权限,Linux文件权限基本属性图文详解
  3. 网络教育计算机二级题库2021,2021计算机二级office
  4. mysql的dockerfile_Dockerfile构建MySQL
  5. mysql concat例子_浅析MySQL中concat以及group_concat的使用
  6. Java---定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)
  7. mysql 5.6 主从同步配置_Mysql 5.6主从同步配置
  8. command not found: ls_内饰更加奢华 新款雷克萨斯LS将于广州车展亮相
  9. 根据遍历序列画二叉树
  10. 015_视图(Views)