2012-02-22 74 views
3

我的应用程序我有一个application-context.xml。现在我实例化的ApplicationContext为:传递参数到ApplicationContext

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

是否有可能通过这个实例来传递参数,使这些参数可以用来初始化一些豆类的一些性质? PS:不使用属性文件。由于参数是运行时生成的,比如exicutable jar的位置,系统结构,os名称等是可变的。

回答

4

这里是解决方案,我张贴,可能会有所帮助的人在未来:

bean类:

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> 

谢谢。

+5

这种方法更简单http://forum.springsource.org/showthread.php?71815-Passing-Bean-properties-using-java-util-Properties。 – 2012-09-18 15:57:38

6

您可以在applicationContext.xml

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

这可以让你在你的bean声明使用语法${myProperty}假设属性文件中包含一个名为myProperty财产直接引用属性使用PropertyPlaceholderConfigurer

样本如何利用这样的属性:

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

另一种选择可以基于该@Value注释搭载SpEL

+1

感谢您的回复。我需要它没有财产文件。我应该在 – 2012-02-22 18:33:36

+2

@TapasBose之前提到它,两种方法都支持系统属性,如果这对你有帮助 – 2012-02-22 18:36:05

+0

我真的很感谢你的帮助。谢谢:) – 2012-02-22 19:01:11