我们知道如果我们要在一个类使用
 spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用spring提供的其他对象或者说有一些不需要交给spring管理,但是需要用到spring里的一些对象。如果这是spring框架的独立应用程序,我们通过

ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId"); 

这样的方式就可以很轻易的获取我们所需要的对象。

但是往往我们所做的都是Web Application,这时我们启动spring容器是通过在web.xml文件中配置,这样就不适合使用上面的方式在普通类去获取对象了,因为这样做就相当于加载了两次spring容器,而我们想是否可以通过在启动web服务器的时候,就把Application放在某一个类中,我们通过这个类在获取,这样就可以在普通类获取spring bean对象了。不多说,看实例!

1.在Spring Boot可以扫描的包下

写的工具类为SpringUtil,实现ApplicationContextAware接口,并加入Component注解,让spring扫描到该bean

因为我们其实是想要的是ApplicationContext,这里就能获取Bean的管理容器

之前通过看源码,得知在Bean的初始化的过程中,有一个步骤是执行实现了Aware接口的方法

实现了对应的Aware接口,我们就能拿到对应的实例。

如果想看spring启动的源码可看如下链接

https://blog.csdn.net/qq_29235677/article/details/118458990


这里提供了3种方法,实现相关的bean的获取,

  • 方法1:bean的名称
  • 方法2:class字节码对象
  • 方法3:bean的名字+class字节码对象
@Slf4j
@Component
public class BeanUtils implements ApplicationContextAware {private static ApplicationContext applicationContext;/*** Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContext方法** @param applicationContext*/@Overridepublic void setApplicationContext(ApplicationContext applicationContext) {if (BeanUtils.applicationContext == null) {BeanUtils.applicationContext = applicationContext;}}//获取applicationContextpublic static ApplicationContext getApplicationContext() {return applicationContext;}//通过name获取 Bean.public static Object getBean(String name) {return getApplicationContext().getBean(name);}//通过class获取Bean.public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}//通过name,以及Clazz返回指定的Beanpublic static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}}

spring boot获取spring容器中的bean对象相关推荐

  1. SpringBoot 之 普通类获取Spring容器中的bean

    SpringBoot 之 普通类获取Spring容器中的bean 转载于:https://www.cnblogs.com/lwmp/p/8892927.html

  2. 【SpringBoot】在普通类中获取spring容器中的bean

    这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...

  3. 在普通类中获取spring容器中的bean

    在普通类中获取spring容器中的bean 1.工具类 package com.itheima.hchat.util;import org.springframework.beans.BeansExc ...

  4. 解决无法注入spring容器,获取不到spring容器中的bean问题

    解决无法注入spring容器,获取不到spring容器中的bean问题 前两天工作中遇到一个问题,收到的需求是根据logbak日志实现通过过滤错误日志发送预警邮件到邮箱,logback自定义实现类如下 ...

  5. Spring容器中的Bean是否会被GC呢?

    Spring容器中的Bean是否会被GC呢?最近好几次被校招实习生问及,对于初学者来说,这应该是一个有意思的问题,鉴于此,笔者顺便写个这个文档. 1.Spring容器中Bean的作用域 当通过Spri ...

  6. Spring注解驱动开发第11讲——面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?

    写在前面 经过前面的学习,我们知道可以通过多种方式向Spring容器中注册bean.可以使用@Configuration注解结合@Bean注解向Spring容器中注册bean:可以按照条件向Sprin ...

  7. Spring注解驱动开发第7讲——如何按照条件向Spring容器中注册bean?这次我懂了!!

    写在前面 当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,而 ...

  8. Servlet自动注入Spring容器中的Bean解决方法

    Servlet自动注入Spring容器中的Bean解决方法 参考文章: (1)Servlet自动注入Spring容器中的Bean解决方法 (2)https://www.cnblogs.com/jank ...

  9. Spring注解驱动开发第10讲——在@Import注解中使用ImportBeanDefinitionRegistrar向容器中注册bean

    写在前面 在前面的文章中,我们学习了如何使用@Import注解向Spring容器中导入bean,不仅可以使用@Import注解快速向容器中导入bean,也可以在@Import注解中使用ImportSe ...

最新文章

  1. yum安装nginx
  2. android nfcDemo
  3. Java-Web 监听器和过滤器
  4. 关于人类肉眼识别模式的简单想法
  5. Python文件与目录操作
  6. BP: 通过SAP name拿到central person id
  7. PL/SQL编程基本概念
  8. vscode 新建python 终端
  9. 算法导论4--求最大和数组
  10. IntelliJ IDEA中使用git
  11. 怎么对ChannelHandler做测试?
  12. 基于衰减因子和动态学习的改进樽海鞘群算法
  13. 虚拟机无法服务器系统安装win7系统,如何解决虚拟机安装Win7系统失败的问题
  14. 一招教你表格里面给方框内打勾
  15. 190种超全的解密工具任你选!!
  16. 如何理解GPO版本号
  17. JS中数组splice、slice和字符串slice、split的混淆
  18. 《途客圈创业记:不疯魔,不成活》一一1.4 合伙组建公司
  19. 【纪中受难记】——Day21:调整心态
  20. “字面量”和“符号引用”

热门文章

  1. 冒险者传说pc6java_我的世界冒险者传说地图
  2. 主动攻击和被动攻击的区别
  3. 【优化求解】粒子群算法的多目标优化matlab源码
  4. 安卓手机反应越来越慢怎么办_安卓手机越用越卡怎么办,看完你学会了么
  5. vue 详情页返回列表,过滤查询条件保留
  6. Node.js轻松入门(一)
  7. php实现7天礼包发放,php 生成游戏兑换码(礼包)方法
  8. java pinyin4j 官网_Pinyin4j简单使用教程
  9. sql 服务器无法启动,解决方案
  10. eclipse最全快捷键使用说明