如何手动获取Spring容器中的bean(ApplicationContextAware 接口)

【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean) 在项目中,我们自定义一个类,如果我们想把这个类交给ioc容器管理,加上@Component衍生注解即可如果这个类不是我们自己自定义的,是我们引入第三方依赖中的,而且我们还想把这个类交给ioc容器管理,那么我们应该定义一个方法,在这个方法上加上@Bean在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天! 阅读详情

ApplicationContextAware 接口的作用

这个接口有什么用?

当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。


如何使用 ApplicationContextAware 接口

如何使用该接口?很简单。

1、定义一个工具类,实现 ApplicationContextAware,实现 setApplicationContext方法

public class SystemContext implements ApplicationContextAware {
	
    private static ApplicationContext applicationContext;

    @SuppressWarnings("rawtypes")
    public static Object getBean(Object beanName) {
        if (beanName instanceof Class) {
            return applicationContext.getBean(((Class) beanName).getName());
        } else {
            return applicationContext.getBean(beanName.toString());
        }
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SystemContext.applicationContext = applicationContext;
    }
    
}


如此一来,我们就可以通过该工具类,来获得 ApplicationContext,进而使用其getBean方法来获取我们需要的bean。

2、在Spring配置文件中注册该工具类

一、因为spring要建立属于自己的容器,就必须要加载自己的配置文件。

这个时候,需要注册ContextLoaderListener或者这个类的子类。

在web.xml加上以下的信息:

1
2
3
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

二、之所以我们能如此方便地使用该工具类来获取,正是因为Spring能够为我们自动地执行 setApplicationContext 方法,显然,这也是因为IOC的缘故,所以必然这个工具类也是需要在Spring的配置文件中进行配置的。
  1. <!-- 初始化SystemContext,注入applicationContext -->     <bean id="SystemContext" class="com.framework.system.engine.SystemContext" lazy-init="false"></bean>

3、编写方法进行使用

一切就绪,我们就可以在需要使用的地方调用该方法来获取bean了。
private static ShineApprovalService getShineApprovalService() {
     return (ShineApprovalService) SystemContext.getBean(ShineApprovalServiceImpl.BEAN_NAME);
}


【SpringBoot】在普通类中获取spring容器中的bean 这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的。在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能的公共实现类,方便大家使用。在写实现类的过程中学习了在普通类中获取spring容器中的bean的方法。 如果我们需要在一个类中使用spring提供的bean对象,那么我们需要把这个bean注入到sp... 阅读详情

相关推荐

ubuntu通过qemu安装银河麒麟V10_Arm_v8 (kylin_v10_飞腾/鲲鹏版)

一、windows下安装vmware虚拟机 二、ubuntu下载地址 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.3-live-server-amd64.iso 三、vmware中新建虚拟机,并使用ubuntu-20.04.3-live-server-amd64.iso作为启用盘 。。。在虚拟机中安装ubuntu(略) 四、配置ssh(如果ssh登录不上时配置) 修改openssh的配置 vi /etc/s

u010533742的博客 8703

使用ApplicationContextAware接口手动注入Bean

@Component public class GetBean<T> implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { ..

u010740881的博客 1177

手把手用LTspice仿真运算放大器电路:从虚短虚断到频响分析

本文通过LTspice仿真软件,手把手教你从搭建基础运算放大器电路开始,验证虚短虚断原理,并逐步深入频响分析与稳定性探究。内容涵盖反相/同相放大器、积分器仿真,导入真实运放模型进行蒙特卡洛分析,以及利用交流分析和波特图评估电路性能,帮助工程师和学生将抽象理论转化为直观、可测量的仿真结果,提升电路设计实战能力。

salt9的博客 1094

Spring获取容器中的Bean的接口ApplicationContextAware

在Web应用中,Spring容器通常采用声明式方式配置产生:开发者只要在web.xml中配置一个Listener,该Listener将会负责初始化Spring容器,MVC框架可以直接调用Spring容器中的Bean,无需访问Spring容器本身。在这种情况下,容器中的Bean处于容器管理下,无需主动访问容器,只需接受容器的依赖注入即可。 在某些的情况下,我们要获取IOC容器中指定注解、类型、名字的Bean,来实现某个功能 实现上,我们不用类似new ClassPathXmlApplicationConte

jc_benben的专栏 888

ENVI 5.6保姆级教程:高分七号DLC影像从打开到融合的完整流程(附避坑指南)

本文详细介绍了ENVI 5.6处理高分七号DLC影像的完整流程,包括环境准备、数据解压、正射校正、图像融合等关键步骤。特别针对国产卫星数据处理的独特挑战,提供了实用的避坑指南和优化技巧,帮助用户高效完成光学影像的预处理和质量提升。

weixin_33269743的博客 382

实验7:机器学习油田产量预测-代码数据-完整代码数据可直接运行-计算机毕设

实验7:机器学习油田产量预测-代码数据-完整代码数据可直接运行-计算机毕设

机器学习深度学习业余选手 477

Spring手动获取bean的四种方式

【代码】Spring手动获取bean的四种方式。

男神的专栏 1323

Unity DOTS核心概念之 System(系统)

本文全面解析Unity ECS架构中System的核心概念与最佳实践。System作为纯逻辑载体,遵循"查询数据→处理数据"的工作流,严格分离数据与逻辑。文章详细介绍了: System定义方式(推荐ISystem接口)与三大设计准则(纯逻辑、无状态、最小权限) 生命周期管理(OnCreate/OnUpdate/OnDestroy)和执行顺序控制(UpdateInGroup/UpdateBefore) 实体查询机制(SystemAPI.Query高级筛选)和多线程优化(IJobEntity

分享知识,拥抱变化 182

ApplicationContextUtil手动注入的Spring Bean,解决new对象的无法调用@Autowired注入的Bean

前言 我发现当前类含有@Autowired注入Spring Bean的成员对象时候,则当前类必须也是Spring Bean才能调用它,也就是说该类必须写上注解@Component、@Configuration加入Spring Bean管理该类。然后运用时候通过@Resource或者@Autowired来注入Bean,这样才能调用该类的某bean成员对象的方法,不能用new xxx()来获得对象,这种方式获得的对象无法调用@Autowired注入的Bean成员对象的方法。 例子 @Component pu

qq_34246965的博客 2657

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

HQChart实战教程21 - uniapp app端K线图定制tooltip

HQChart实战教程21 - uniapp app端K线图定制tooltip序效果步骤2. 注册标题绘制事件3. 标题绘制回调函数格式说明eventdataobjtooltip显示函数完整代码HQChart代码地址 序 hqchartK线图内置一个tooltip, 如果需要定制一个tooltip, 我们可以通过注册绘制标题事件,来自己做一个div显示数据。 参考教程HQChart实战教程7-自定义显示手势点击K线显示信息 效果 步骤 在外部创建一个view,并在view里创建需要显示的信息字段. 例子里

小银 2556

ApplicationContextAware构建BeanHolder

Author:赵志乾 Date:2019-05-16 Declaration:All Right Reserved!!! 基于Spring框架的实际项目,会将Bean放入IoC容器进行统一管理(包括依赖管理和生命周期管理)。而从IoC容器中获取需要的Bean则主要是通过容器接口ApplicationContext。 Web项目中,通常都是由Web容器和Spring IoC容器相互配合完成B...

zhaoyaxuan001的博客 382

渗透测试面试题

渗透测试面试题 一.思路流程 1.信息收集 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等) 子域名收集,旁站,C段等 google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等 扫描网站目录结构,爆后台,网站banner,测试文件,...

千寻的博客 12万+

spring 手动获取bean以及获取spring上下文

ApplicationContextAware 这个接口对象就是我们今天的主角,其实以实现ApplicationContextAware接口的方式获取ApplicationContext对象实例并不是SpringBoot特有的功能,早在Spring3.0x版本之后就存在了这个接口,在传统的Spring项目内同样是可以获取到ApplicationContext实例的,下面我们看看该如何编码才能达到...

qq_38572383的博客 624

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

让bean了解所在容器

  有时bean需要能够访问程序上下文,因为在一些情况下我们需要手动获取bean实例,这就需要程序上下文的支持 spring的ApplicationContextAware和BeanFactoryAware接口能够让bean了解容器的情况,他们分别声明了一个setApplicationContext方法和一个setBeanFactory方法,Spring会检测bean是否实现了上述接口...

weixin_30546189的博客 83

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring项目中多线程通过@Autowired注入bean对象一直为null问题

问题描述 Spring项目中创建的线程通过@Autowired自动注入bean对象,但是bean一直为null,并引起NullPointerException异常。 问题原因 创建的线程不在Spring容器中,无法获得Spring容器中的bean对象。 解决办法 通过java代码手动获取。 代码示例 (1)继承ApplicationContextAware接口...

球球的博客 1366

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

问题:使用@Autowired无法注入Bean对象

问题:使用@Autowired无法注入Bean对象 版权声明:From Lay https://blog.youkuaiyun.com/Sadlay/article/details/82952163 问题 在公司的一个项目开发时,遇到了一个类的属性无法注入的问题 public class DemoController extends BaseController implements BussinessPro...

qq_25074105的博客 1862

spring 容器如何创建bean对象_如何动态地将对象托管给Spring进行管理

引言IoC可以说是spring最核心的部分,是spring家族任意组件的基本。我们可以将Java Bean托管给Spring,Spring通过其IOC功能可以依次解析出Java Bean依赖的其他实例。能够使我们从复杂繁琐的对象依赖中解脱出来,专注于业务本身。但是有时候我们需要动态地创建一些Java Bean,并且希望将这些对象托管给Spring或者使用Spring的IOC功能对对象依赖的各个Be...

weixin_39628498的博客 739

ApplicationContextAware:Bean 的“上下文感知”超能力

  在 Spring Boot 的世界中,我们依赖依赖注入(DI)来管理 Bean 之间的关系。然而,有时我们需要 Bean 直接访问 Spring 应用上下文(ApplicationContext)来执行一些特殊操作。这时,ApplicationContextAware 接口就派上了用场。本文将深入探讨 ApplicationContextAware 在 Spring Boot 中的应用,揭示其工作原理,并分享一些最佳实践。  

十二的博客 1233

spring无法注入bean时,获取bean,代替注入方法,用在例如线程中

spring无法注入bean时,获取bean,代替注入方法,用在例如线程中

weixin_50170400的博客 407

使用ApplicationContextAware优雅地获取bean对象

是

qq_41948178的博客 821

spring中如何向一个单例bean中注入非单例bean

spring中如何向一个单例bean中注入非单例bean 文章目录spring中如何向一个单例bean中注入非单例bean错误实例实现ApplicationContextAware接口lookup method 错误实例 这里有一个原型(生命周期为prototype)的类 package com.example.myDemo.component; import org.springframework.context.annotation.Scope; import org.springframework.

yzc_sky的博客 609

SpringUtil获取Spring容器对象

*自己公司使用的简单的SpringUtil,可以使用直接从Spring容器中获取对象.比较方便. 主要就是实现ApplicationContextAware ,学过Spring的都知道,Spring提供一些实现Aware对应的类,来获取对应的信息,比如,

2509_93995527的博客 260
上一篇: Maven构建springBoot Demo案例
下一篇: java对象拷贝之BeanUtils.copyProperties() 用法
visual2015
博客等级 码龄11年 12粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值