当前位置: 首页 > 知识库问答 >
问题:

如何在Spring覆盖PropertiesFactoryBean?

宗政安歌
2023-03-14

我想重写java中的getProperty()方法。util。物业类别,请告知。

1.Spring上下文文件

spring-context.xml

    <bean id="myproperty" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
            <property name="locations" value="classpath:myproperties.properties" />

</bean> 

2.Java类

public class MyClass{

      @Autowired
        public void setMyproperty(Properties myproperty) {
             this.url=myproperty.getProperty("url");
         }

    }

3.配置文件

myproperties.properties
url=http://stackoverflow.com

仅供参考:我正在从配置文件中提取批次值,并希望在从中获取值后调用trim()。属性,以避免代码冗余,尝试重写getProperty()方法。

使用:Spring 4.0

共有1个答案

东郭凯捷
2023-03-14

扩展spring默认属性占位符(PropertyPlaceHolderConfigure)并捕获它在局部变量中加载的属性。

public class PropertiesUtils extends PropertyPlaceholderConfigurer {

    private static Map<String, String> propertiesMap;
    private int springSystemPropertiesMode = SYSTEM_PROPERTIES_MODE_FALLBACK;

    @Override
    public void setSystemPropertiesMode(int systemPropertiesMode) {
        super.setSystemPropertiesMode(systemPropertiesMode);
        springSystemPropertiesMode = systemPropertiesMode;
    }

    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {
        super.processProperties(beanFactory, props);

        propertiesMap = new HashMap<String, String>();
        for (Object key : props.keySet()) {
            String keyStr = key.toString();
            String valueStr = resolvePlaceholder(keyStr, props, springSystemPropertiesMode);
            propertiesMap.put(keyStr, valueStr);
        }
    }

    public static String getProperty(String name) {
        return propertiesMap.get(name).toString();
    }
 类似资料:
  • 我正在尝试重写方法。但我还是发现了错误: 马塞尔

  • 问题内容: 我正在尝试Backbone.js,而我正在尝试的事情之一就是调用远程API,因此,据我了解的文档资料,我需要能够覆盖Backbone.sync 。 在文档本身中没有如何执行此操作的示例,并且似乎没有用于Backbone的google组…有人可以指出执行此操作的示例吗? 问题答案: 看看这个带注释的源示例,在该示例中,它们被本地存储替代项覆盖 基本上,Backbone.sync应该是一个

  • 我的意图是在spring boot应用程序中有两个概要文件—开发和生产概要文件。开发概要文件只是为了覆盖生产概要文件的一些变量(比如内存中的数据库,而不是云中的数据库)。由于我预计将来会对生产概要进行一些更改,所以在开发概要中复制变量似乎不是一个解决方案。 因此,在Spring参考中,我读到应该只从引用的配置文件中添加属性。 有时,将特定于概要文件的属性添加到活动概要文件中而不是替换它们是很有用的

  • 问题内容: 我有一些无法删除的对象,必须更新一个名为“ deleted”的通用字段。我在那儿读到可以使用编写通用查询。因此,我试图覆盖这样的方法: 但是我有一个单元测试,表明我错了! 是否有可能重写这样的方法? 问题答案: 要修改查询,您需要在方法中添加一个。 确保您了解所选方法的副作用: 执行操作查询几乎会绕过所有缓存。因此,后续的可能/将仍然返回您尝试删除的对象的旧实例,以防它已经加载了它。为

  • 对于Spring Boot2.1,默认情况下禁用bean重写,这是一件好事。 然而,我确实有一些测试,其中我使用mockito用模拟实例替换bean。在默认设置下,使用这种配置的测试将由于bean重写而失败。 我发现唯一有效的方法是通过应用程序属性启用bean重写: 但是,我真的希望确保测试配置的bean定义设置最小,这一点将由spring在禁用重写的情况下指出。 我正在重写的bean是 在导入到

  • 问题内容: 我目前在glassfish v2.1中使用基于身份的身份验证来登录用户,并且工作正常。我想切换到该网站,并希望能够获得最初请求的URL(即在重定向到登录页面之前),并在我的程序化登录代码中使用它,以便在身份验证后将用户重定向回请求的页面。 我已经看过源代码-在我的情况下,它是(catalina代码库),它将初始请求保存在会话中的对象中,但是该会话不是,因此没有直接方法可以访问它。 还是