java – 尝试使用constructor-arg元素初始化bean时,为什么会出现BeanCreationException
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 尝试使用constructor-arg元素初始化bean时,为什么会出现BeanCreationException,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3580字,纯文字阅读大概需要6分钟。
内容图文
![java – 尝试使用constructor-arg元素初始化bean时,为什么会出现BeanCreationException](/upload/InfoBanner/zyjiaocheng/748/979a39b546ff4f8f85a753d526e37712.jpg)
我正在尝试创建一个不可变对象并在spring中从xml配置文件初始化它.但是我得到了一个BeanCreationException并且我无法找出原因.该异常指出它找不到具有以下消息的适当构造函数:
“Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)”
但是,如果我将constructor-arg元素更改为使用基于索引的参数解析它可以正常工作,但这不会产生可读的配置文件.也就是说,我想要基于名称的参数解析,以便很容易看出参数对应的内容.
据我所知,根本没有歧义.也就是说,只有一个两个args构造函数.它需要两个整数,一次称为’a’,一个称为’b’,这正是bean元素指定的内容
所有文件都是UTF-8编码,因此不能成为编码问题.
例外:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'constructorTest' defined in class path resource [ApplicationContext.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at com.alertme.energysmart.service.TestClass.main(TestClass.java:50)
conifg提取物:
<bean id="constructorTest" class="testpackage.TestClass">
<constructor-arg name="a" value="0" type="int" />
<constructor-arg name="b" value="1" type="int" />
</bean>
<bean id="propertyTest" class="testpackage.TestClass">
<property name="a" value="0" />
<property name="b" value="1" />
</bean>
类:
package testpackage;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import com.alertme.lang.IgnoreNullsShortPrefixStyle;
public class TestClass {
private int a;
private int b;
public TestClass() {
// java bean
}
/**
* This is the targeted constructor
*/
public TestClass(int a, int b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void setB(int b) {
this.b = b;
}
public int getB() {
return b;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, IgnoreNullsShortPrefixStyle.get());
}
public static void main(String[] args) {
final BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("ApplicationContext.xml"));
final TestClass bean = (TestClass) beanFactory.getBean("constructorTest");
System.out.println(bean);
}
}
解决方法:
属性“name”的文档说:
Note: This requires debug symbols to be stored in the class file in order to introspect argument names!
那么也许您没有启用调试符号?
内容总结
以上是互联网集市为您收集整理的java – 尝试使用constructor-arg元素初始化bean时,为什么会出现BeanCreationException全部内容,希望文章能够帮你解决java – 尝试使用constructor-arg元素初始化bean时,为什么会出现BeanCreationException所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。