3-16构造方法混淆
一下代码有两个构造函数,一个是接收int一个是接收String类型的,当我们在配置文件传入一个1的时候,我们会发现它传给了String类型的,这显然不是我们希望的。下面配置文件就是一个解决办法。
package com.apress.prospring2.ch03.beanfactory;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;/** * @author janm */public class ConstructorConfusionDemo { private String someValue; public ConstructorConfusionDemo(String someValue) { System.out.println("ConstructorConfusionDemo(String) called"); this.someValue = someValue; } public ConstructorConfusionDemo(int someValue) { System.out.println("ConstructorConfusionDemo(int) called"); this.someValue = "Number: " + Integer.toString(someValue); } public static void main(String[] args) { BeanFactory factory = new XmlBeanFactory( new ClassPathResource("/META-INF/spring/beanfactorydemo3-context.xml")); ConstructorConfusionDemo cc = (ConstructorConfusionDemo)factory.getBean("constructorConfusion"); System.out.println(cc); } public String toString() { return someValue; }}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="constructorConfusion" type="int"/> </bean></beans>
ConstructorConfusionDemo(int) calledNumber: 1