博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring构造方法注入类型歧义
阅读量:5891 次
发布时间:2019-06-19

本文共 2169 字,大约阅读时间需要 7 分钟。

在Spring框架中,当一个类包含多个构造函数带的参数相同,它总是会造成构造函数注入参数类型歧义的问题。

问题

让我们来看看这个客户 bean 实例。它包含两个构造方法,均接受3个不同的数据类型参数。
package com.yiibai.common;public class Customer {	private String name;	private String address;	private int age;		public Customer(String name, String address, int age) {		this.name = name;		this.address = address;		this.age = age;	}		public Customer(String name, int age, String address) {		this.name = name;		this.age = age;		this.address = address;	}	//getter and setter methods	public String toString(){		return " name : " +name + "\n address : "               + address + "\n age : " + age;	}}
在Spring bean 的配置文件中,通过传递一个“yiibai' 的名字,地址为'188',以及年龄为'28'。
yiibai
188
28
运行它,你期望的结果是什么?
package com.yiibai.common;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {    public static void main( String[] args )    {    	ApplicationContext context =     	  new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});    	Customer cust = (Customer)context.getBean("CustomerBean");    	System.out.println(cust);    }}

输出结果

name : yiibai address : 28 age : 188
其结果不是我们所期望的,第一个构造器不执行,而是第二构造函数运行。在Spring参数类型'188' 能够转换成int,所以Spring只是转换它,并采用第二个构造来执行,即使你认为它应该是一个字符串。
另外,如果Spring不能解决使用哪个构造函数,它会提示以下错误信息
constructor arguments specified but no matching constructor found in bean 'CustomerBean' (hint: specify index and/or type arguments for simple parameters to avoid type ambiguities)

解决

为了解决这个问题,应该为构造函数指定的确切数据类型,通过像这样类型的属性:
yiibai
188
28
再次运行它,现在得到你所期望的。
输出结果
name : yiibai address : 188 age : 28
这是一个很好的做法,显式声明每个构造函数参数的数据类型,以避免上述构造注入型歧义的问题。
 
http://www.yiibai.com/spring/constructor-injection-type-ambiguities-in-spring.html
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/6367211.html,如需转载请自行联系原作者
你可能感兴趣的文章
Android图片圆角效果
查看>>
WeChat Official Account Admin Platform API Introduction
查看>>
C语言写单链表的创建、释放、追加(即总是在最后的位置增加节点)
查看>>
C# LINQ详解(一)
查看>>
视频直播点播nginx-rtmp开发手册中文版
查看>>
ruby学习总结04
查看>>
Binary Tree Paths
查看>>
Ueditor自定义ftp上传
查看>>
线程以及多线程
查看>>
PHP队列的实现
查看>>
单点登录加验证码例子
查看>>
[T-SQL]从变量与数据类型说起
查看>>
occActiveX - ActiveX with OpenCASCADE
查看>>
iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)...
查看>>
BeanUtils\DBUtils
查看>>
VC 创建托盘,托盘tooltip。右键托盘菜单,点击别的地方会隐藏掉的问题。
查看>>
第一天,新的定义
查看>>
WPF EventSetter Handler Command
查看>>
polya定理,环形涂色
查看>>
day4-装饰器前奏
查看>>