2015-11-03 2 views
0

В моем проекте более 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 переменных. Поэтому, пожалуйста, предложите мне лучший способ динамически установить значение для всех компонентов.

Заранее спасибо.

+0

Подождите, сколько у вас CustomerBeans? И почему вам нужно установить идентификатор? –

+0

У меня 1000 различных фасоль. Мне нужно установить значение и создать для него объект. после этого я могу преобразовать объект в XML. Для установки значения в 1000 различных бобов мне нужно создать объект. Поэтому я планировал пойти с весной. Он будет создавать объект во время компиляции. –

+0

В цикле, если мы передали имя бина, он может предоставить объект, тогда мы можем установить значение, но весну, запрашивающую тип cast для хранения объекта. Если я набираю тип в конкретный класс, то он не является динамическим. Я также попробовал интерфейс. –

ответ

0

Все ваши бобы могут простираться от родительских классов со свойствами, чтобы установить или использовать отражение для назначения полей со значениями после их получения от 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; 
     } 
    } 
} 

И обратите внимание, что бобы пойдут Singleton рамки если не указано явно. Вы можете изменить область бобов, как указано в this document.

+0

У меня возникла проблема с динамическим созданием компонента. В вашем коде вы предлагаете мне передать объект, имя и значение поля. но я не могу создать объект динамически. поэтому только я не могу установить значения для конкретной переменной. Не могли бы вы помочь с этим. –

+0

Когда вы говорите, что невозможно динамически создать объект, что это значит? Любая ошибка? –

0

Это против концепции ООП. Вы не можете вызвать/получить доступ к методу/свойству, которое не определено в родительском (здесь Object) классе. Класс Object не имеет метода setId().

Попробуйте это (Edited)) Просто создайте Interface ValueSet { void setValueToVariables();}, а затем выполните в ValueSet для всех бобин. Class CustomerBean implements ValueSet теперь вы можете реализовать setValueToVariables(). Изменить класс объекта, то есть ValueSet obj = (ValueSet) appContext.getBean("CustomerBean"); obj.setId(1);

+0

Да, я согласен с этим. Есть ли у них какие-либо способы преодолеть этот сценарий. –

Смежные вопросы