Springframework constructor-arg
У меня есть MainClass, который имеет 2 переменные. Я хотел бы передать эти 2 значения классу компонентов Springframework "Test". как определить это в applicationContext.xml, а также как передать эти 2 значения переменных в bean-компонент "Test".
Пример:
class MainClass {
public int var1;
public int var2;
public Test test;
public void setVar1(int var11) {
var1 = var11;
}
public void setVar2(int var22) {
var2 = var22;
}
public static void main(String args[]) {
ApplicationContext context =
new FileSystemXmlApplicationContext("applicationContext.xml");
Test = context.getBean("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 ответа
Вы можете передавать значения следующим образом:
<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
}
Как говорит Николас, это немного странно, но вы можете достичь этого с помощью 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
НТН