4

我有一个 MainClass 有 2 个变量。我想将这两个值传递给 springframework bean 类“Test”。如何在 applicationContext.xml 中定义它,以及如何将这两个变量值传递给 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>
4

2 回答 2

7

您可以像这样传递值:

<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
}
于 2011-09-29T19:18:56.070 回答
0

正如 Nicholas 所说,这有点奇怪,但您可以使用 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");
 }

注意:如果你想从 main() 引用 var1 和 var2 应该是静态的

然后像这样引用占位符:

<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

高温高压

于 2011-09-29T22:32:08.017 回答