Springframework constructor-arg - PullRequest
       22

Springframework constructor-arg

4 голосов
/ 29 сентября 2011

У меня есть MainClass, который имеет 2 переменные.Я хотел бы передать эти 2 значения классу компонентов Springframework "Test".как мне определить это в applicationContext.xml, а также как передать эти 2 значения переменных в bean-компонент «Test».----- класс TEST ------------

public class Test {

 public Test (int var1, int var2) {}
}

------------- applicationContext.xml -------------

   <bean id="test" class="com.path.test">
       <constructor-arg index="0" type="int" value="????"/>
       <constructor-arg index="1" type="int" value="????"/>
   </bean>

Ответы [ 2 ]

7 голосов
/ 29 сентября 2011

Вы можете передавать значения следующим образом:

<bean id="test" class="com.path.test.Test">
   <constructor-arg index="0" type="int" value="123"/>
   <constructor-arg index="1" type="int" value="456"/>
</bean>

Не забудьте указать полное имя класса в качестве значения атрибута class.

Тем не менее,ваш Test класс не удерживает свое состояние.Если вы хотите получить значения, которые вы указали в applicationContext.xml, вам следует создать несколько членов Test:

public class Test {
    private int v1;
    private int v2;

    public Test (int var1, int var2) {v1 = var1; v2 = var2;}

    public int getVOne() {
        return v1;
    }

    public int getVTwo() {
        return v2;
    }
}

После этого вы сможете получить к ним доступ в вашем mainтакой метод:

public static void main(String args[]) {

    ApplicationContext context = 
       new FileSystemXmlApplicationContext("applicationContext.xml");
    Test test = context.getBean("test");
    int v1 = test.getVOne();
    int v2 = test.getVTwo();

    System.out.println("V1: " + v1 + " V2: " + v2); //output: V1: 123 V2: 456
}
0 голосов
/ 30 сентября 2011

Как говорит Николас, это немного странно, но вы можете добиться этого с помощью PropertyPlaceholderConfigurer.

Примерно так:

 public static void main(String args[]) {
        PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
        Properties properties = new Properties();
        properties.setProperty("var1", Integer.toString(var1));
        properties.setProperty("var2", Integer.toString(var2));
        configurer.setProperties(properties);

        FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext();
        context.addBeanFactoryPostProcessor(configurer);

        context.setConfigLocation("applicationContext.xml");
        context.refresh();
        Test test = (Test) context.getBean("test");
 }

ПРИМЕЧАНИЕ: var1 и var2 должны быть статическими, если вы хотите ссылаться на них из main ()

Затем укажите заполнители следующим образом:

<bean id="test" class="com.path.test">
   <constructor-arg index="0" type="int" value="${var1}"/>
   <constructor-arg index="1" type="int" value="${var2}"/>
</bean>

Смотрите также эту ветку форума: http://forum.springsource.org/showthread.php?71815-Passing-Bean-properties-using-java.util.Properties

API документ: http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

НТН

...