SpringBoot中注入ApplicationContext对象的三种方式

在项目中,我们可能需要手动获取spring中的bean对象,这时就需要通过 ApplicationContext 去操作一波了!

1、直接注入(Autowired)

@Component
public class User {@Autowiredprivate ApplicationContext applicationContext;
}

2、构造器方法注入

@Component
public class User{private ApplicationContext applicationContext;public User(ApplicationContext applicationContext) {this.applicationContext = applicationContext;}
}

3、手动构建类实现接口

/*** Spring的ApplicationContext的持有者,可以用静态方法的方式获取spring容器中的bean** @date 2018年5月27日 下午6:32:11*/
@Component
public class SpringContextHolder implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringContextHolder.applicationContext = applicationContext;}public static ApplicationContext getApplicationContext() {assertApplicationContext();return applicationContext;}@SuppressWarnings("unchecked")public static <T> T getBean(String beanName) {assertApplicationContext();return (T) applicationContext.getBean(beanName);}public static <T> T getBean(Class<T> requiredType) {assertApplicationContext();return applicationContext.getBean(requiredType);}private static void assertApplicationContext() {if (SpringContextHolder.applicationContext == null) {throw new RuntimeException("applicaitonContext属性为null,请检查是否注入了SpringContextHolder!");}}
}

注:在使用该类静态方法时必须保证spring加载顺序正确!
可以在使用类上添加 @DependsOn(“springContextHolder”),确保在此之前 SpringContextHolder 类已加载!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django2.1支持的mysql版本_一文解决django 2.2与mysql兼容性问题

Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MTV的框架模式&#xff0c;即模型M&#xff0c;视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的&#xff0c;即是CMS(内容管理系统)软件。并于2005年7月在BSD许可…

springBoot的自动扫描包范围

springboot扫描包的范围的约定 SpringBoot的注解扫描的默认规则是从SpringBoot的项目入口类。若入口类所在的包是com.example.demo那么自动扫描包的范围是com.example.demo包及其下面的子包&#xff0c;如果service包和dao包不在此包下面&#xff0c;则不会自动扫描。 手动配置…

mysql一共有多少引擎_MySQL存储引擎你们知道多少?

MySQL是我们经常使用的数据库处理系统(DBMS)&#xff0c;不知小伙伴们有没有注意过其中的“存储引擎”(storage_engine)呢&#xff1f;有时候面试题中也会问道MySQL几种常用的存储引擎的区别。这次就简短侃一下存储引擎那些事儿。先去查一下“引擎”概念。引擎(Engine)是电子平…

SpringBoot 中@Autowired 注入失效原因及解决方法

SpringBoot 中Autowired 注入失效原因及解决方法 1、原因分析 1.1 包没有被扫描到通过Autowired注入的类所在的包路径不在Application启动类所在的包/子包路径下。Spring Boot项目的Bean装配默认规则是根据Application类(指项目入口类)所在的包位置从上往下扫描。eg: Applica…

python词云模糊_用Python和WordCloud绘制词云(内附让字体清晰的秘笈)

环境及模块&#xff1a;Win7 64位Python 3.6.4WordCloud 1.5.0Pillow 5.0.0Jieba 0.39目标&#xff1a;绘制安徽省2018年某些科技项目的词云&#xff0c;直观展示热点。思路&#xff1a;先提取项目的名称&#xff0c;再用Jieba分词后提取词汇&#xff1b;过滤掉“研发”、“系列…

shiro框架,自定义realm注入service失败解决办法

shiro框架,自定义realm注入service失败解决办法 报错如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘shiroFilter’ defined in ServletContext resource [/WEB-INF/config/spring-shrio.xml]: Cannot resolve reference …

MySQL建立多选一列表_如何实现自定义列表的多个item,的单选或多选

展开全部自定义ListView item中包含一个e69da5e6ba903231313335323631343130323136353331333337376333textview 和checkbox,checkbox选中级别高于item,故在xml中进行屏蔽单选方法:(该方法同样适用于radiobutton)main.xmlandroid:layout_width"match_parent"android:l…

spring的bean不能注入的几种原因及分析

1、异常信息 2.有可能引起的原因: 1、在applicationContext.xml的配置文件里的包扫描不对。 2、在web.xml里没有加载spring容器。 3、分布式工程&#xff0c;使用dubbo或者hsf通信&#xff0c;在服务层&#xff0c;或者消费层&#xff0c;单词写错了。 4、还有一种可能&am…

linux 备份mysql并上传_Linux 网站目录和MySQL备份并上传FTP

#!/bin/bashMYSQL_USERrootMYSQL_PASSFTP_USERFTP_PASSFTP_IPFTP_backupbackupWEB_DATA/home/wwwrootDataBakNameData_$(date ”%Y%m%d”).tar.gzWebBakNameWeb_$(date ”%Y%m%d”).tar.gzOldDataData_$(date -d -3day ”%Y%m%d”).tar.gzOldWebWeb_$(date -d -3day ”%Y%m%d”…

python后端需要什么基础_【后端开发】python爬虫需要什么基础

入手爬虫确实不要求你精通Python编程&#xff0c;但基础知识还是不能忽视的&#xff0c;那么我们需要哪些Python基础呢&#xff1f;首先我们先来看看一个最简单的爬虫流程&#xff1a;第一步要确定爬取页面的链接&#xff0c;由于我们通常爬取的内容不止一页&#xff0c;所以要…

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyR

异常信息&#xff1a; org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2 at org.mybatis.spring.MyBatisExceptionTransl…

java 两个字段排序_如何在Java中按两个字段排序?

使用Java 8流方法.。//Creates and sorts a stream (does not sort the original list)persons.stream().sorted(Comparator.comparing(Person::getName).thenComparing(Person::getAge));Java 8 Lambda方法.。//Sorts the original list Lambda stylepersons.sort((p1, p2) -&…

spring的动态代理,碰到了一个类型转换的问题:java.lang.ClassCastException: com.sun.proxy.$Proxy16 cannot be cast to com.

spring的动态代理&#xff0c;碰到了一个类型转换的问题&#xff1a; java.lang.ClassCastException: com.sun.proxy.$Proxy16 cannot be cast to com.Charon.service.UserServiceImpl 首先介绍一下spring的动态代理。 spring使用的动态代理有两种&#xff1a;JDK Proxy 和CGL…

java xms512m_安装版的tomcat设置JAVA_OPTS=-Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M...

tomcat如果是通过windows服务启动&#xff0c;执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\JavaOptions原值为-Dcatalina.homeE:\Tomcat…

关于Typora编辑器编写markdown文档时插入出现前字吞后字的解决方法

关于Typora编辑器编写markdown文档时插入出现前字吞后字的解决方法 原因是按到了键盘上的Insert键&#xff0c;使得编辑模式变为了改写&#xff0c;所以会把文本替换掉&#xff0c;这个按键没有状态标示。

异常信息java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:

在写springboot项目时出现了一个这样的错误&#xff01;&#xff01; ava.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43) …

java http url 编码_Java中的HTTP URL地址编码

java.net.URI类可以帮助;在URL的文档中找到Note, the URI class does perform escaping of its component fields in certain circumstances. The recommended way to manage the encoding and decoding of URLs is to use an URI使用带有多个参数的构造函数&#xff0c;如&…

Error querying database. Cause: java.lang.UnsupportedOperationException

mybatis抛出以下异常&#xff1a; Error querying database. Cause: java.lang.UnsupportedOperationException 对应语句如下&#xff1a; select distinct code from ssj_dictionary 错误原因是 resultType“java.util.List” &#xff0c;这里应该改成&#xff1a; result…

从java多态到策略模式_设计模式中的多态——策略模式详解

2. 策略模式详解2.1 策略模式定义策略模式定义了一系列算法,并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。策略模式让算法独立于使用它的客户端而独立的变化。可以使用多态进行类比来理解策略模式的定义。一系列算法可以理解成接口的不同实现类,因为不同实现类…

linux服务器安装zookeeper本地项目远程连接

linux服务器安装zookeeper本地项目远程连接 zookeeper linux 服务器安装&#xff0c;本地idea连接 先决条件&#xff1a;一台linux服务器&#xff0c;服务器里面已经安装好java环境&#xff08;安装Java看这里&#xff1a;https://blog.csdn.net/qq_43842093/article/details…