加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring:如何组织应用程序Web上下文?

发布时间:2020-12-15 08:35:53 所属栏目:Java 来源:网络整理
导读:场景: 启动应用程序并在main()中加载ClassPathXmlApplicationContext,这将启动Jetty webapp. dispatcher servlet然后加载XmlWebApplicationContext dispatcher servlet然后查找WEB-INF / applicaitonContext.xml以作为根上下文加载 我只是想绕过上下文. 我
场景:

>启动应用程序并在main()中加载ClassPathXmlApplicationContext,这将启动Jetty webapp.
> dispatcher servlet然后加载XmlWebApplicationContext
> dispatcher servlet然后查找WEB-INF / applicaitonContext.xml以作为根上下文加载

我只是想绕过上下文.

>我应该使用上面列出的3个上下文吗?
>我是否应该使用第一个上下文作为根上下文并且不允许调度程序加载默认的WEB-INF / applicationContext?
>我应该在第1和第3个上下文之间创建父/子关系吗? (这是由调度程序servlet在#2和#3上下文之间完成的)

我还不是很清楚这些背景如何相互关联,我只需要快速了解它.

解决方法

上下文#1根本没有连接到其他上下文,它只是启动Web服务器(Jetty)的实现细节.
上下文#2和#3在 Spring reference documentation中有所解释.

>上下文#2从WEB-INF / [servlet-name] -servlet.xml加载.由于可以有许多DispatcherServlet,因此对于不同的servlet,单个webapp中可能存在多个这样的上下文.
>上下文#3通常从WEB-INF / applicationContext.xml加载,您必须采取特殊步骤才能加载它(使用ContextLoaderListener).此加载的上下文成为特定Web应用程序中所有特定servlet上下文的父上下文(共享).因此,它适用于加载业务服务bean和数据库访问bean.

您概述的设置完全正常.实际上,我将其称为推荐的设置,因为它使事情变得简单并且接近于在典型的webapp中构造Spring上下文的方式.

然而:

如果您不想将业务bean保留在单独的上下文中,则可以删除上下文#3.但是,我建议你将它们分开(你可能需要稍后将它们移动到另一台机器上并通过某种远程机制提供).

摆脱上下文#3的另一个原因是:您可能希望在多个Web应用程序之间共享您的业务bean.为了实现这一点,你需要一个特殊的Spring ContextLoader子类,然后在Jetty启动你的webapps时做一些魔术.我已经这样做了,如果需要可以提供一些建议.

最后,您可以摆脱上下文#1并将其替换为引导Jetty的旧式纯Java代码.这个决定100%取决于您和偏好问题.为了记录,我还想使用单独的Spring applicationContext来引导Jetty.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读