springboot 使用上下文获取bean
问题
在使用springboot开发项目过程中,有些时候可能出现说会有在spring容器加载前就需要注入bean的类,这个时候如果直接使用@Autowire注解,则会出现控制针异常!
解决办法
如下:
创建一个springContextUtil类
package cn.eangaie.appcloud.util; import org.springframework.context.ApplicationContext; public class SpringContextUtil { private static ApplicationContext applicationContext; //获取上下文 public static ApplicationContext getApplicationContext() { return applicationContext; } //设置上下文 public static void setApplicationContext(ApplicationContext applicationContext) { SpringContextUtil.applicationContext = applicationContext; } //通过名字获取上下文中的bean public static Object getBean(String name){ return applicationContext.getBean(name); } //通过类型获取上下文中的bean public static Object getBean(Class<?> requiredType){ return applicationContext.getBean(requiredType); } }
在AppcloudApplication.class 启动类里边,将初始化该类,并将context注入进去
public class AppcloudApplication { public static void main(String[] args) { ApplicationContext context=SpringApplication.run(AppcloudApplication.class, args); SpringContextUtil.setApplicationContext(context); } }
在需要注入bean的地方,使用getBean(bean名称)的方式获取
MessageTemplateController messageTemplateController= (MessageTemplateController) SpringContextUtil.getBean("messageTemplateController");
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
详解在SpringBoot应用中获取应用上下文方法
1.定义上下文工具类: package com.alimama.config; import org.springframework.context.ApplicationContext; /** * 上下文获取工具类 * @author mengfeiyang * */ public class SpringContextUtil { private static ApplicationContext applicationContext; public static void setAppl
-
spring boot中使用@Async实现异步调用任务
什么是"异步调用"? "异步调用"对应的是"同步调用",同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行:异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序. 同步调用 下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内) package com.kfit.task; import java.uti
-
深入理解spring boot异步调用方式@Async
本文主要给大家介绍了关于spring boot异步调用方式@Async的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 1.使用背景 在日常开发的项目中,当访问其他人的接口较慢或者做耗时任务时,不想程序一直卡在耗时任务上,想程序能够并行执行,我们可以使用多线程来并行的处理任务,也可以使用spring提供的异步处理方式@Async. 2.异步处理方式 调用之后,不返回任何数据. 调用之后,返回数据,通过Future来获取返回数据 3.@Async不返回数据 使用@EnableAsyn
-
详解SpringBoot中异步请求和异步调用(看完这一篇就够了)
一.SpringBoot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应.一句话:增加了服务器对客户端请求的吞吐量(实际生产上我们用的比较少,如果并发请求量很大的情况下,我们会通过nginx把请求负载到集群服务的各个节点上来分摊请求压力,当然还可以通过消息队列来做请求的缓冲). 2.异步请求的实现 方式一:Servlet方式实现异步请求
-
在Spring异步调用中传递上下文的方法
什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行.异步调用指,在程序在执行时,无需等待执行的返回值即可继续执行后面的代码.在我们的应用服务中,有很多业务逻辑的执行操作不需要同步返回(如发送邮件.冗余数据表等),只需要异步执行即可. 本文将介绍 Spring 应用中,如何实现异步调用.在异步调用的过程中,会出现线程上下文信息的丢失,我们该如何解决线程上下文信息的传递. Sprin
-
Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭详解
前言 之前分享了一篇关于Spring Boot中使用@Async来实现异步任务和线程池控制的文章:<Spring Boot使用@Async实现异步调用:自定义线程池>.由于最近身边也发现了不少异步任务没有正确处理而导致的不少问题,所以在本文就接前面内容,继续说说线程池的优雅关闭,主要针对ThreadPoolTaskScheduler线程池. 问题现象 在上篇文章的例子Chapter4-1-3中,我们定义了一个线程池,然后利用@Async注解写了3个任务,并指定了这些任务执行使用的线程池.在上文
-
spring boot 使用@Async实现异步调用方法
使用@Async实现异步调用 什么是"异步调用"与"同步调用" "同步调用"就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码执行完毕才能执行:"异步调用"则是只要上一行代码执行,无需等待结果的返回就开始执行本身任务. 通常情况下,"同步调用"执行程序所花费的时间比较多,执行效率比较差.所以,在代码本身不存在依赖关系的话,我们可以考虑通过"异步调用"的方式来并发执行. &q
-
springboot无法从静态上下文中引用非静态变量的解决方法
静态方法可以不用创建对象就调用,非静态方法必须有了对象的实例才能调用. 因此想在静态方法中直接引用非静态方法是不可能的,因为不知道调用哪个对象的非静态方法,编译器不可能给出答案,因为没有对象. java就怕找不到对象. 解决办法: spring的set注入方法,通过非静态的setter方法注入静态变量,样例如下 @PropertySource(value = {"classpath:config/application.yml"},ignoreResourceNotFound = tr
-
springboot 使用上下文获取bean
问题 在使用springboot开发项目过程中,有些时候可能出现说会有在spring容器加载前就需要注入bean的类,这个时候如果直接使用@Autowire注解,则会出现控制针异常! 解决办法 如下: 创建一个springContextUtil类 package cn.eangaie.appcloud.util; import org.springframework.context.ApplicationContext; public class SpringContextUtil { priv
-
Spring 应用上下文获取 Bean 的常用姿势实例总结
本文实例讲述了Spring 应用上下文获取 Bean 的常用姿势.分享给大家供大家参考,具体如下: 1. 前言 通常,在Spring应用程序中,当我们使用 @Bean,@Service,@Controller,@Configuration 或者其它特定的注解将 Bean 注入 Spring IoC .然后我们可以使用 Spring 框架提供的 @Autowired 或者 JSR250.JSR330 规范注解来使用由 Spring IoC 管理的 Bean . 2. 从应用程序上下文中获取 Bea
-
SpringBoot项目如何将Bean注入到普通类中
目录 如何将Bean注入到普通类中 Spring管理的类获得一个注入的Bean方式 非Spring管理的类获得一个注入的Bean方式 普通类中通过ApplicationContext上下文获得Bean 将ApplicationContext传入普通类中 在普通类中如何获取Bean节点 如何将Bean注入到普通类中 Spring管理的类获得一个注入的Bean方式 @Autowired是一种注解,可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作,自动执行当前方法,如果方法有参数,会在IO
-
SpringBoot普通类获取spring容器中bean的操作
前言 在spring框架中,是无法在普通类中通过注解注入实例的,因为sping框架在启动的时候,就会将标明交给spring容器管理的类进行实例化,并梳理他们彼此的依赖关系,进行注入,没有交给spring容器管理的普通类,是不会进行注入的,即使你使用了注入的相关注解.这个时候,如果我们需要在普通类中获取spring容器中的实例,就需要一些特定的方法,这里将整理一下如何在springboot中实现这样的方法. 创建springboot工程demo 项目结构图示 项目结构说明 service包下为de
-
Springboot如何通过自定义工具类获取bean
目录 Springboot 自定义工具类获取bean 在工具类注入bean的三种方式 1. 需求/目的 2.使用环境 3.方法一:获取ApplicationContext上下文 4.方法二:将工具类的对象也添加为bean 5.方法三:在spring Boot 启动时创建工具类自身的静态对象 Springboot 自定义工具类获取bean /** * Created with IntelliJ IDEA. * * @Auther: zp * @Date: 2021/03/26/13:32 * @D
-
详解SpringBoot静态方法获取bean的三种方式
目录 方式一 注解@PostConstruct 方式二 启动类ApplicationContext 方式三 手动注入ApplicationContext 方式一 注解@PostConstruct import com.example.javautilsproject.service.AutoMethodDemoService; import org.springframework.beans.factory.annotation.Autowired; import org.springfr
-
SpringBoot如何使用ApplicationContext获取bean对象
目录 使用ApplicationContext获取bean对象 SpringBoot Bean注入的深入研究 下面代码可正常运行 下面代码不能正常运行 比较 解决方案 应用 使用ApplicationContext获取bean对象 编写一个ApplicationContextFactory工厂类 public class ApplicationContextFactory{ private static ApplicationContext applicationContext = null;
-
Springboot实现多线程注入bean的工具类操作
场景: 使用springboot多线程,线程类无法自动注入需要的bean 解决方法: 通过工具类获取需要的bean 工具类代码: import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springfram
-
Java中Spring获取bean方法小结
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢? Bean工厂(com.springframework.beans.factory.BeanFactory)是Spring框架最核心的接口,它提供了高级IoC的配置机制.BeanFactory使管理不同类型的Java对象成为可能,应用上下文(com.springframework.context.ApplicationContext)建立在BeanFactory基础之上,提供
随机推荐
- DOM基础及php读取xml内容操作的方法
- 关键字排名(Keyword Ranking)
- Powershell在一个会话中只允许执行指定命令的方法
- 不错的JavaScript面向对象的简单入门介绍第1/2页
- JavaScript获取一个范围内日期的方法
- js制作带有遮罩弹出层实现登录注册表单特效代码分享
- Spark自定义累加器的使用实例详解
- 基于JS实现的笛卡尔乘积之商品发布
- 在ASP.NET 2.0中操作数据之一:创建一个数据访问层
- PHP获取文件绝对路径的代码(上一级目录)
- Android使用AudioRecord实现暂停录音功能实例代码
- js 获取时间间隔实现代码
- 雷客图 站长安全助手 vbs版代码(asp 木马查找)
- Android Button点击事件的四种实现方法
- jquery实现简单的拖拽效果实例兼容所有主流浏览器
- jquery实现滑屏大图定时收缩为小banner图片的广告代码
- CentOS下.htaccess不起作用的解决方法
- C++函数重载的深入解析
- 一个简洁的多级别论坛
- 使用PHPMailer发送邮件实例