Spring框架–应用程序上下文–到达应用程序上下文的三种方法

本文向您展示了三种不同的方式来获取代码中的Spring Framework Application Context。

摘要

(这是我在2010年撰写的旧文章的转贴)。 在Google中搜索“ Spring ApplicationContextAware ”时,您会遇到很多建议,而且我也看到很多人继续抱怨说他们的setApplicationContext方法没有被调用。 因此,为澄清起见,我在博客中写了一些说明,希望它有助于澄清上下文的工作方式。

方法1

在您的类中,可以实现ApplicationContextAware类,如下所示:

public class MyClass implements ApplicationContextAware {static final long serialVersionUID = 02L;ApplicationContext applicationContext = null;public void doSomething(){if (applicationContext != null && applicationContext.containsBean("accessKeys")){MyBean beanA = (MyBean) applicationContext.getBean("mybean");//Do something with this AccessBean}return null;}@Overridepublic void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {System.out.println("setting context");this.applicationContext = applicationContext;}}

方法2

如果您使用的是Java Servlet,则可以执行以下操作:

public class gzservlet extends HttpServlet {static final long serialVersionUID = 02L;ApplicationContext applicationContext = null;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {if (applicationContext == null){System.out.println("setting context in get");applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());}if (applicationContext != null && applicationContext.containsBean("accessKeys")){AccessBean thisAccessBean = (AccessBean) applicationContext.getBean("accessKeys");req.setAttribute("keys", thisAccessBean.toString());System.out.println("setting keys");}req.getRequestDispatcher("/index2.jsp").include(req,resp);}}

因此,人们会问的问题是什么时候使用什么? 答案是。 取决于您如何调用Spring。

方法1的工作原理:调用Spring时,您正在使用DispatcherServlet将此链接。 然后,方法1将解析ApplicationContextAware的实现,并调用setApplicationContext()方法来设置上下文。

在web.xml中:

<servlet><servlet-name>dispatchservlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>dispatchservlet</servlet-name><url-pattern>/*</url-pattern>
</servlet-mapping>

如果您没有使用DispatcherServlet,并且正在使用侦听器初始化Spring,并且您有自己的Servlet正在驱动Request \ Response范围,则请使用方法#2。 下面是这种情况下web.xml外观的示例。

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener><servlet><servlet-name>MyOwnServlet</servlet-name><servlet-class>com.something.myservlet</servlet-class><load-on-startup>2</load-on-startup>
</servlet><servlet-mapping><servlet-name>MyOwnServlet</servlet-name><url-pattern>*.do</url-pattern>
</servlet-mapping>

我希望这可以阐明为什么有时即使实现了ApplicationContextAware接口,也不会调用您的setter。

[09/12/2010]这是获取上下文的第三种方法:

使用静态方法创建以下类以获取上下文:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;public class ApplicationContextProvider implements ApplicationContextAware{private static ApplicationContext ctx = null;public static ApplicationContext getApplicationContext() {return ctx;}public void setApplicationContext(ApplicationContext ctx) throws BeansException {this.ctx = ctx;}
}

并在您的spring bean配置xml文件中添加以下内容:

<bean id="applicationContextProvider" class="ApplicationContextProvider"></bean>

现在,在您的课程中,您可以执行以下操作:

ApplicationContext ctx = ApplicationContextProvider.getApplicationContext();

而已!!!

干杯。

如果您觉得这篇文章有用,请考虑注册我的电子邮件或将其重新发布到您喜欢的社交网站上。 请参阅右侧导航栏上的链接。

现在为今天的灵感

为了创新,我们不能期待别人做了什么。 开辟一条道路的整个想法是,以前没有道路。 今天要创新!

翻译自: https://www.javacodegeeks.com/2017/11/spring-framework-application-context-three-ways-get-application-context.html

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

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

相关文章

最简单的语言来说JAVA中的NEW到底怎么搞

new 到底是干啥的&#xff1f; JAVA中的new关键字就是在你声明了一个对象后&#xff0c;来给对象分配相应的内存&#xff0c;可以使用任何public来构造 People stunew People( ); new 在堆中为对象申请了一块空间&#xff0c;new也使用了父类的构造方法 java里的new的英文意…

34个计算机网络易错知识点总结

不属于网络体系结构所描述的内容是&#xff1a;协议的内部实现细节OSI模型中第N层为第N1层提供服务自下而上第一个提供端到端服务的是传输层通信子网&#xff1a;1.高速链路2.交换机3.路由器TCP/IP模型中一共由四层&#xff0c;分别是&#xff1a; 1.应用层&#xff1a;应用层是…

mongodb副本集_设置MongoDB副本集分为4个步骤

mongodb副本集介绍 在详细介绍配置MongoDB副本集之前&#xff0c;让我简要介绍一下它们&#xff1a; 副本集是Mongodb数据库提供的功能&#xff0c;可实现高可用性和自动故障转移。 它是一种传统的主从配置&#xff0c;但具有自动故障转移功能。 基本上&#xff0c;它是mong…

JAVA类的继承、覆写和final关键字

extends不用多说&#xff0c;是来继承的关键字&#xff0c;但它有几个要点&#xff1a; java不允许多重继承(一个类只能继承一个父类,不能继承多个父类)派生类会继承基类所有属性和方法,但不能直接访问基类的private私有属性实例化派生类时,会先去调用父类的构造方法构造基类,…

Spring Boot:使用Thymeleaf布局方言的Thymeleaf模板装饰器

介绍 在所有Thymeleaf模板上重用页眉和页脚的问题经常在StackOverflow上提出。 在本文中&#xff0c;我将向您展示如何使用Thymeleaf布局方言来结构化模板&#xff0c;以在Spring Boot应用程序中实现更高的代码可重用性。 创建一个Spring Boot应用程序 让我们使用Spring Initi…

猫、狗与Java的多态

多态&#xff08;Polymorphism&#xff09;按字面的意思就是“多种状态”。在面向对象语言中&#xff0c;接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术&#xff0c;赋值之后&#…

solr crud_Spring Data Solr教程:CRUD(差不多)

solr crud在我的Spring Data Solr教程的上一部分中&#xff0c;我们学习了如何配置Spring Data Solr。 现在该迈出一步&#xff0c;了解我们如何管理Solr实例中存储的信息。 此博客文章描述了我们如何向Solr索引添加新文档&#xff0c;如何更新现有文档的信息以及如何从索引中删…

子类覆盖父类(Java)

要求&#xff1a;尝试创建一个父类&#xff0c;在父类中创建两个方法&#xff0c;在子类中覆盖第二个方法&#xff0c;再为子类创建一个对象&#xff0c;将它向上转型并调用这个方法 由于Java里面没有虚函数&#xff0c;所以它的多态是可以被继承的 public class tyu{public …

在Java中进行输入验证时用错误通知替换异常

在我以前的文章中&#xff0c;我写了一个输入验证设计&#xff0c;该设计取代了难以维护和测试的 if-else块。 但是&#xff0c;正如某些读者指出的那样&#xff0c;它有一个缺点–如果输入数据有多个验证错误&#xff0c;则用户将不得不多次提交请求以查找所有错误。 从可用性…

Java构建子类对象时的顺序

先看一个这么的程序&#xff1a; //------------------------------------------------------------------------// //程序目的&#xff0c;创建一个父类与子类&#xff0c;分别创建构造方法 public abstract class usecase1 {abstract void testAbstract();usecase1(){//&…

关于Java中serialUID的序列化的问题

在我们平时处理JAVA类中的问题时&#xff0c;有时会碰见类似这样的一行代码&#xff1a; private static final long serialVersionUID 1L;这就是程序的序列化ID 所谓序列化&#xff0c;用一句通俗的话来说&#xff0c;就是将对象冻结了放入硬盘的过程&#xff0c;举一个例子…

java 绑定微信号开发_Java开发中的常见危险信号

java 绑定微信号开发在开发&#xff0c;阅读&#xff0c;复审和维护成千上万行Java代码的几年中&#xff0c;我已经习惯于看到Java代码中的某些“ 危险信号 ”&#xff0c;这些信号通常&#xff08;但可能并非总是&#xff09;暗示着代码有问题。 我不是在谈论总是错误的做法&a…

使用绝对布局的方法创建一个登录密码验证的简易窗口

绝对布局是指直接采用坐标指定的方式在容器中创建窗口&#xff0c;这种方式比较灵活 采用这种方法创建布局的方式主要有以下几步&#xff1a; 使用Container.setLayout(null)的方式取消布局管理器使用Compon.setBounds()的方式来设置每个组件的大小 下面先上代码 import ja…

Neo4j:Cypher –属性值只能是原始类型或其数组

本周初&#xff0c;当我尝试在我认为要共享的节点上创建数组属性时&#xff0c;遇到了一个有趣的Cypher错误消息。 这是我写的Cypher查询&#xff1a; CREATE (:Person {id: [1, "mark", 2.0]})导致此错误&#xff1a; Neo.ClientError.Statement.TypeError Prope…

通信工程制图期末考试大纲

通信工程建设的三个阶段 初步设计、技术设计、施工图设计 通信工程建设的参与方 1、建设单位&#xff1a;是建设工程的投资人&#xff0c;也称“业主"。 2、勘察单位&#xff1a;是指已通过建设行政主管部门的资质审查&#xff0c;从事工程测量、水文地质和岩土工程等工…

锁相环锁相原理简洁版

锁相环锁相原理 1.没有参考信号输入的时候&#xff0c;环路滤波器的输出为一个固定值&#xff0c;这是的VCO按照其固定的频率进行震荡 2.当有参考信号输入时&#xff0c;Ur和Uv同时加到鉴相器来鉴相&#xff0c;如果鉴相器fr和fv差别不大的话&#xff0c;这两个电压做差&#…

古诺模型_再见了古诺。 你好Drools工作台。

古诺模型Drools 6.0发生了许多变化。 随着功能和功能的更改&#xff0c;我们对Guvnor github存储库进行了重组&#xff0c;以更好地反映我们的新架构。 历史上&#xff0c;Guvnor一直是Drools的Web应用程序。 它由Drools专用的编辑器&#xff0c;后端存储库和简化的资产管理系统…

八千字复习一下天线与电磁波

1. 空间坐标系 空间直角坐标系&#xff08;常用&#xff09;极坐标系平面直角坐标系距离矢量就是空间向量坐标单位矢量就是给距离矢量xyz底下分别除以模长梯度就是xyz求偏导&#xff0c;记得写 ex⃗\vec{e_{x}}ex​​/ey⃗\vec{e_{y}}ey​​/ez⃗\vec{e_{z}}ez​​,最后方程左…

Apache Fluo:填充Google搜索索引的Percolator的实现

Apache Fluo是Apache Accumulo [3]的Percolator [2]&#xff08;填充Google的搜索索引&#xff09;的开源实现 。 使用Fluo&#xff0c;用户可以将新数据连续地合并到大型现有数据集中&#xff0c;而无需重新处理所有数据。 与批处理和流传输框架不同&#xff0c;Fluo提供了低得…

最通俗的语言讲解卷积码、码树图、状态图以及维特比译码

什么是卷积码&#xff1f; 卷积码是由伊利亚斯发明的一种非分组码&#xff0c;它更加倾向于纠错&#xff0c;对于实际的性能优于分组码&#xff0c;运算较为简单。 将卷积码记为(n,k,N),码率定义为k/n n是n个比特 k是k个信息位 N是N个信息段 卷积码编码器 组成&#xff1a…