如何使用spring动态创建对象

时间:2015-11-03 10:13:08

标签: java spring spring-mvc

在我的项目中,超过1000个bean类是他们的。我需要使用setter方法或构造函数将数据设置为这些类来创建对象。

我正在使用spring来创建对象。使用以下代码。我可以创建一个对象。

Object obj = (Object) appContext.getBean("CustomerBean");
obj.setId(1); //showing error

但我无法将值设置为特定的CustomerBean类。要设置值,它要求我像这样更改代码。

CustomerBean obj = (CustomerBean) appContext.getBean("CustomerBean");
obj.setId(1);

我有超过1000个班级,每个班级有5到10个变量。所以请建议我一个更好的方法来动态地为所有bean设置一个值。

提前致谢。

2 个答案:

答案 0 :(得分:0)

所有bean都可以从父类扩展,其属性设置或使用反射从Spring接收后为字段分配值:

import java.lang.reflect.Field;

public class Executor {

    public static void main(String[] args) throws Exception {
        TestClass testClass = new TestClass();
        setValueToObject(testClass, "stringField", "someValue");
        setValueToObject(testClass, "booleanField", true);
        System.out.println(testClass.getStringField());
        System.out.println(testClass.getBooleanField());
    }

    private static void setValueToObject(TestClass testClass, String filedName,
            Object value) throws Exception {
        Class objectClass = testClass.getClass();
        Field field = objectClass.getDeclaredField(filedName);
        field.setAccessible(true);
        if (field.isAccessible()) {
            field.set(testClass, value);
        }
    }

    static class TestClass {
        private String stringField;
        private Boolean booleanField;

        public String getStringField() {
            return stringField;
        }

        public void setStringField(String stringField) {
            this.stringField = stringField;
        }

        public Boolean getBooleanField() {
            return booleanField;
        }

        public void setBooleanField(Boolean booleanField) {
            this.booleanField = booleanField;
        }
    }
}

请注意,除非明确指定,否则bean将转到Singleton范围。您可以按this document中提到的那样更改bean范围。

答案 1 :(得分:0)

这是违反OOPs的概念。您不能调用/访问未在父(此处为Object)类中定义的方法/属性。 Object类没有" setId()"方法

试试这个(已编辑)) 只需创建一个Interface ValueSet { void setValueToVariables();},然后在ValueSet中实现所有bean。 Class CustomerBean implements ValueSet现在你可以实现setValueToVariables()。更改对象类,即ValueSet obj = (ValueSet) appContext.getBean("CustomerBean"); obj.setId(1);