2013-03-06 4 views
2

У меня есть список типов классов, которые мне нужны для повторения и для каждого типа в этом списке, Spring необходимо автоматически найти правильный тип объекта для инициализации.Автоматическая инициализация объекта на основе типа весной

Например: У меня есть ClassA и ClassB. Когда, например, существует тип User, ClassA необходимо инициализировать с определенными параметрами (которые определены в context.xml). Когда, например, существует тип сообщения, он также должен делать объект из класса ClassA, но с разными параметрами, которые снова определены в контексте .xml.

Как бы я это сделал? Я посмотрел на инверсии управления функцией пружины, но не могу найти правильное применение для моей конкретной цели

Одна из идей было то, что я делаю боб для каждого вида возможного типа, такие как

<bean id="classAconfig" class="ClassA"> 
    <property name="type" value="User.class"/> 
    <property name="fields"> 
     <list> 
      <value>id</value><value>email</value> 
     </list> 
    </property> 
    <property name="map"> 
     <map> 
      <entry key="id" value="1"/><entry key="login" value="1"/><entry key="email" value="1"/> 
     </map> 
    </property> 
</bean> 

С уважением,

Merlijn

ответ

0

Ну, я нашел. Просто нужно было определить некоторые компоненты в контексте xml, как описано выше. Но в ClassA я расширил InitializingBean и переопределил метод afterPropertiesSet. В этом методе я зарегистрировал ClassA в своей службе.

public class ClassA extends InitializingBean 
@Override 
public void afterPropertiesSet() throws Exception { 
    service.registerClass(this); 
} 

А потом в моей службы:

public void registerClass(@Nonnull Class clazz) { 
    classes.put(clazz.getType(), clazz); 
}