gpt4 book ai didi

java - Spring 3.1 PropertySourcesPlaceholderConfigurer 和条件导入

转载 作者:IT老高 更新时间:2023-10-28 13:47:25 26 4
gpt4 key购买 nike

查看 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 也无能为力。由于 Environment 及其一组 PropertySource 是在容器刷新之前配置的,因此可以针对 Environment 解析元素中的占位符,而不会出现任何生命周期问题。

更新:

根据javadoc for PropertySourcesPlaceholderConfigurer , PropertySourcesPlaceholderConfigurerBeanFactoryPostProcessor ,所以脚注真正说的是在安装 PropertySourcesPlaceholderConfigurer之前解决了导入,因此它也不起作用(事实上,当时 <import/>已解决,配置器甚至可能还不存在!)是的,安装后它会查看 Environment ,但你不能用它来解析 <import/> ,因为当时没有后处理器在运行。其中包括 PropertySourcesPlaceholderConfigurer .

基本上 Spring XML 上下文设置或多或少是这样的:

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

这与导致您无法使用 order 的问题类似。许多后处理器的属性来应用 BeanPostProccesorBeanFactoryPostProcessor 之前(例如让 PropertyPlaceholderConfigurer@PersistenceContext 解析占位符):该行为在 Spring 应用程序上下文中是硬编码的,因此您必须通过专门一些 Spring 类来解决它。

关于java - Spring 3.1 PropertySourcesPlaceholderConfigurer 和条件导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com