Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring运行时Bean引用_Spring_Namespaces - Fatal编程技术网

Spring运行时Bean引用

Spring运行时Bean引用,spring,namespaces,Spring,Namespaces,我正在为一个Spring项目解析一个自定义名称空间,但在RuntimeBeanReference方面遇到了问题。我有一个类MyClass,它接受一个列表。在我的beandef文件中,定义了一个名为“MyObj”的MyObject类型的bean 在我的自定义命名空间解析器中,我有如下代码: RootBeanDefinition myBean = new RootBeanDefinition(MyClass.class); ConstructorArgumentValues cav

我正在为一个Spring项目解析一个自定义名称空间,但在RuntimeBeanReference方面遇到了问题。我有一个类MyClass,它接受一个列表。在我的beandef文件中,定义了一个名为“MyObj”的MyObject类型的bean

在我的自定义命名空间解析器中,我有如下代码:

RootBeanDefinition myBean = new RootBeanDefinition(MyClass.class);        
ConstructorArgumentValues cav = new ConstructorArgumentValues();
List list = new LinkedList();
list.add(new RuntimeBeanReference("MyObj"));
cav.addIndexedArgumentValue(0, list);
然而,当我通过spring查找bean时,我得到一个异常,说它无法将RuntimeBeanReference转换为MyObject。我是否需要做一些特定的事情来强制解决引用

谢谢


杰夫,我刚找到它。我需要使用ManagedList而不是常规LinkedList。ManagedList(和ManagedMap)将由Spring解析引用。

正如您所发现的,您可以通过两种方式添加内部bean列表:

内部bean作为引用

// 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);
//创建bean引用列表
List innerBeans=newmanagedlist();
添加(新的RuntimeBean引用(“innerBean1”);
添加(新的RuntimeBean引用(“innerBean2”);
//根bean定义
BeanDefinitionBuilder根BeanDefinitionBuilder=BeanDefinitionBuilder
.RootBean定义(RootBean.class)
.addPropertyValue(“innerBeans”,innerBeans);
作为内联定义的内部bean

// 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);
//创建bean引用列表
List innerBeans=newmanagedlist();
add(innerbean1定义);
添加(innerBean2Definition);
//根bean定义
BeanDefinitionBuilder根BeanDefinitionBuilder=BeanDefinitionBuilder
.RootBean定义(RootBean.class)
.addPropertyValue(“innerBeans”,innerBeans);