0

使用 Java Spring,如何覆盖属性占位符的默认行为以返回任何属性的“foo”?

我要走的当前路径是扩展 PropertySource 如下:

public class FooPropertySource extends PropertySource<Object> {
    private static final String DEFAULT_NAME = "foo";

    public FooPropertySource() {
        super(DEFAULT_NAME, null);
    }

    @Override
    public Object getProperty(String name) {
        return "foo";
    }
}

在这一点上,我有两个问题:

A) 我如何处理我的应用程序上下文 XML 文件?到现在为止,我已经把它定义为一个bean......就是这样。

B) 我是否必须在代码中执行任何操作才能从我的应用程序上下文中加载其他 bean,以便它们使用 FooPropertySource?

谢谢

4

1 回答 1

0

您必须注册此 PropertySource 才能添加到您的应用程序上下文中。如果您手动启动应用程序上下文,您可以这样做:

    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext();
    ctx.setConfigLocation("applicationContext.xml");
    ctx.getEnvironment().getPropertySources().addLast(new FooPropertySource());
    ctx.refresh();

如果您在 Web 环境中执行此操作,则必须注册一个自定义ApplicationContextInitializer以在刷新应用程序上下文以注入您的 PropertySource 之前拦截应用程序上下文:

public class CustomInitializer implements ApplicationContextInitializer<ConfigurableWebApplicationContext> {
    public void initialize(ConfigurableWebApplicationContext ctx) {
        ctx.getEnvironment().getPropertySources().addLast(new FooPropertySource());
    }
}

更多细节在这里

于 2012-09-11T19:59:16.047 回答