Spring RuntimeBeanReference - PullRequest
       8

Spring RuntimeBeanReference

2 голосов
/ 25 июня 2009

У меня есть собственное пространство имен, которое я анализирую для проекта Spring, и у меня возникают проблемы с RuntimeBeanReferences. У меня есть класс MyClass, который принимает список. В моем beandef-файле у меня определен bean-компонент типа MyObject с именем «MyObj».

В моем анализаторе пространства имен у меня есть код, который выглядит следующим образом:

RootBeanDefinition myBean = new RootBeanDefinition(MyClass.class);        
ConstructorArgumentValues cav = new ConstructorArgumentValues();
List list = new LinkedList();
list.add(new RuntimeBeanReference("MyObj"));
cav.addIndexedArgumentValue(0, list);

Однако, когда я ищу бин через spring, я получаю исключение, в котором говорится, что он не может преобразовать RuntimeBeanReference в MyObject. Нужно ли делать что-то конкретное для принудительного разрешения ссылки?

спасибо,

Джеф

Ответы [ 2 ]

5 голосов
/ 25 июня 2009

Я только что нашел это. Мне нужно использовать ManagedList вместо обычного LinkedList. ManagedList (и ManagedMap) будут иметь ссылки, разрешенные Spring.

2 голосов
/ 23 ноября 2011

Как вы узнали, вы можете добавить список внутренних бинов двумя способами:

Внутренние бобы в качестве ссылок

// Create list of bean references
List<RuntimeBeanReference> innerBeans = new ManagedList<RuntimeBeanReference>();
innerBeans.add(new RuntimeBeanReference("innerBean1"));
innerBeans.add(new RuntimeBeanReference("innerBean2"));

// Root bean definition
BeanDefinitionBuilder rootBeanDefinitionBuilder = BeanDefinitionBuilder
        .rootBeanDefinition(RootBean.class)
        .addPropertyValue("innerBeans", innerBeans);

Внутренние бобы как встроенные определения

// Create list of bean references
List<BeanDefinition> innerBeans = new ManagedList<BeanDefinition>();
innerBeans.add(innerBean1Definition);
innerBeans.add(innerBean2Definition);

// Root bean definition
BeanDefinitionBuilder rootBeanDefinitionBuilder = BeanDefinitionBuilder
        .rootBeanDefinition(RootBean.class)
        .addPropertyValue("innerBeans", innerBeans);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...