我正在使用一些非常基本的应用程序代码浏览 Spring Framework 参考文档。到目前为止,我已经ApplicationContext
从一个 XML 文件创建了一个并加载了一些 bean。我相信我非常了解这个过程。我已经加载了一些带有基于基本类型的属性的基本 bean,并且发现这一点很简单。
我现在正在研究一个以其他 bean 作为其属性的复合 bean。到目前为止,我已经能够使用对 bean 和内部 bean 的直接引用来设置这些属性。但是,当我尝试让idref
元素工作时(请参阅http://docs.spring.io/spring/docs/3.2.4.RELEASE/spring-framework-reference/html/beans.html#beans-idref-element ) 我得到以下异常:
java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [com.example.BasicBean] for property 'idRef': no matching editors or conversion strategy found
下面的代码片段:
应用程序上下文 XML
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="id-bean" class="com.example.BasicBean" scope="singleton">
<property name="value" value="31"/>
</bean>
<bean id="ref-bean" class="com.example.BasicBean" scope="singleton">
<property name="value" value="37"/>
</bean>
<bean id="cb" class="com.example.CompositeBean" scope="singleton">
<property name="id" ref="id-bean"/> <!-- works -->
<property name="inner"> <!-- works -->
<bean class="com.example.BasicBean">
<property name="value" value="43"/>
</bean>
</property>
<property name="idRef"> <!-- exception thrown -->
<idref bean="ref-bean"/>
</property>
</bean>
</beans>
Java 应用程序代码
public void main()
{
context = new ClassPathXmlApplicationContext("beans.xml");
CompositeBean cb = context.getBean("cb", CompositeBean.class);
}
Java Bean 代码
public class CompositeBean
{
private BasicBean id;
private BasicBean idRef;
private BasicBean inner;
// Default constructor exists
// Setters, getters for each attribute exist
...
}
public class BasicBean
{
private int value;
// Default constructor exists
// Setters, getters for each attribute exist
...
}
版本信息:我正在使用 Eclipse IDE (Kepler)、Maven 3.1、Java 7 (1.7.45)、Spring 3.2.4
对我做错了什么有任何想法吗?