当前位置: 首页 > 面试题库 >

Spring 3.1 PropertySourcesPlaceholderConfigurer和条件导入

郭炳
2023-03-14
问题内容

查看3.1(http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-
management/
)中对spring的新支持,看起来这应该是可能的:

<context:property-placeholder location="/WEB-INF/application-customer-dev.properties,classpath:application-customer.properties" ignore-resource-not-found="true"/>

<import resource="classpath*:com/x/core/security/security-${login.security}.xml"/>

其中login.security在application-customer-dev.properties中为:

login.security=dev

(并且security-
dev.xml确实存在于适当的位置)。但由于缺少login.security,因此我丢失了一些内容。我希望在3.1之前的spring版本中会出现这种情况,但是看起来对3.1(我们正在使用)有效吗?


问题答案:

链接的脚注[2]:

[2]:因为<import/>元素的处理必须在调用BeanFactoryPostProcessors之前进行,这意味着即使PropertyPlaceholderConfigurer也无济于事。由于在容器刷新之前已配置了环境及其属性源集,因此可以针对环境解析元素中的占位符,而不会出现任何生命周期问题。

更新

根据PropertySourcesPlaceholderConfigurer的javadoc,PropertySourcesPlaceholderConfigurera
BeanFactoryPostProcessor,所以脚注真正说的是,导入是
安装PropertySourcesPlaceholderConfigurer 之前 解决的,因此也 无法正常工作
(事实上​​,在<import/>解决该问题时,配置器甚至可能无法是的,当安装它时,它将查看Environment,但是您不能使用它来解析<import/>,因为当时没有后处理器可运行。其中包括PropertySourcesPlaceholderConfigurer

基本上,Spring XML上下文设置大致是这样的:

  1. 上下文已创建。
  2. Environment 被设置。
  3. 读取XML(所有XML,必要时解析导入)。Bean定义已创建。
  4. BeanFactoryPostProcessor安装并调用,处理Bean定义。
  5. BeanPostProcessor已安装。
  6. 根据bean的定义实例化bean。BeanPostProcessor被应用。

这与导致类似问题的原因类似,该问题导致您无法使用order许多后处理器的属性在a BeanPostProccesor之前应用a
BeanFactoryPostProcessor(以执行诸如PropertyPlaceholderConfigurer从a来创建占位符的操作@PersistenceContext):该行为在Spring应用html" target="_blank">程序上下文中进行了硬编码,因此您必须通过专门处理一些Spring类来解决此问题。



 类似资料:
  • 我正在使用jsf 2.2和primefaces开发一个web应用程序。我想根据用户选择的不同选项转到一个或另一个页面。如果用户选择控制台PS4,而伦敦城转到第1页,我该怎么办。xhtml,如果他选择了控制台xbox和巴黎城市,请转到第2页。xhtml? 代码如下:

  • 7.1.3导航条件说明 导航实现,在硬件和软件方面是由一定要求的,需要提前准备。 1.硬件 虽然导航功能包集被设计成尽可能的通用,在使用时仍然有三个主要的硬件限制: 它是为差速驱动的轮式机器人设计的。它假设底盘受到理想的运动命令的控制并可实现预期的结果,命令的格式为:x速度分量,y速度分量,角速度(theta)分量。 它需要在底盘上安装一个单线激光雷达。这个激光雷达用于构建地图和定位。 导航功能包

  • 我在组件的列表中显示了一个项目数组。项目的属性之一是描述字段,其范围可以从一个单词到几个句子。 当描述太长,我想截断它,并显示一个按钮,将显示点击时的完整文本。是否截断和显示按钮的条件基于返回布尔值的函数: 然后我从组件的模板端使用这个函数,如下所示(ngFor的一小部分): 这里使用的CSS很简单: 目前,该行为非常偶然,我在控制台中收到错误: expressionchangedafterith

  • 问题内容: 我正在将RTL合并到我的React应用程序中。我有两个CSS文件,一个用于LTR,一个用于RTL。我从下拉菜单中选择用户使用的是英文版本还是阿拉伯版本。 我坚持认为,当用户选择阿拉伯语版本时如何有条件地导入我的RTL CSS文件,而当用户选择英语时如何恢复为普通CSS文件。 任何帮助或指导,将不胜感激 我正在使用React&webpack 问候 问题答案: 我以前遇到过这个问题,我所做

  • 具有不同角色的用户需要在网页顶部有不同的navbar。我的topnavs是th:片段,用单独的文件编写,这部分代码工作正常。但是当我使用th: switch和th:替换时,所有topnavs都会显示在网页中,而不仅仅是一个。 我在寻找这些问题的解决方案,但没有任何帮助: 带有多个大小写的胸腺叶开关语句 如何使用thymeleaf条件-if-elseif-else 我尝试过的事情: #2 #3 #4

  • 我想根据条件更改我的开始导航片段。我的起始片段可以是片段1或片段2。有没有办法实现它?