3

我的应用程序有一个 application-context.xml。现在我将 ApplicationContext 实例化为:

ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");

是否可以通过此实例化传递参数,以便这些参数可用于初始化某些 bean 的某些属性?

PS:不使用属性文件。由于参数是在运行时生成的,例如可执行 jar 的位置、系统架构、操作系统名称等,这些都是可变的。

4

2 回答 2

6

您可以在您applicationContext.xml

<context:property-placeholder location="classpath:my.properties"/>

这允许您使用语法直接在 bean 声明中引用属性,${myProperty}假设属性文件包含一个名为myProperty.

如何使用此类属性的示例:

<bean id="foo" class="com.company.Foo">
   <property name="bar" value="${myProperty}"/>
</bean>

另一种选择可以基于@ValueSpEL.

于 2012-02-22T18:27:49.753 回答
6

这是我发布的解决方案,将来可能对某人有所帮助:

豆类:

public class RunManager {

    private String jarPath;
    private String osName;
    private String architecture;

    public RunManager() {

    }

    public RunManager(String[] args) {
        this.jarPath = args[0];
        this.osName = args[1];
        this.architecture = args[2];
    }

    public String getJarPath() {
        return jarPath;
    }

    public void setJarPath(String jarPath) {
        this.jarPath = jarPath;
    }

    public String getOsName() {
        return osName;
    }

    public void setOsName(String osName) {
        this.osName = osName;
    }

    public String getArchitecture() {
        return architecture;
    }

    public void setArchitecture(String architecture) {
        this.architecture = architecture;
    }       
}

ApplicationContext的初始化:

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
BeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(RunManager.class).addConstructorArgValue(args).getBeanDefinition();
beanFactory.registerBeanDefinition("runManager", beanDefinition);
GenericApplicationContext genericApplicationContext = new GenericApplicationContext(beanFactory);
genericApplicationContext.refresh();
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "application-context.xml" }, genericApplicationContext);      

这个 bean 的注入引用到 application-context.xml 的另一个 bean:

<bean id="configuration" class="jym.tan.movielibrary.configuration.Configuration" >     
    <property name="runManager" ref="runManager" />
</bean>

谢谢。

于 2012-02-22T18:59:01.830 回答