我正在使用Spring Framework参考文档和一些非常基本的应用程序代码。到目前为止,我已经从XML文件创建了一个ApplicationContext
并加载了一些bean。我相信我很了解这个过程。我已经加载了一些基于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 App Code
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
对我做错了什么的想法?
答案 0 :(得分:0)
感谢@Farid指出我错误地使用了此实例中的idref
属性。正如Spring doco指出的那样(我已经多次读过并且仍然错过了它)它被设计用于将bean的 id 传递给容器而不是实际的bean。所以,坚持上面的前两个方法(ref和内部bean)来传递bean。