问题描述
以下的程序中当明确使用name-ref的时候可以将namebean绑定到personbean上,但是自动装配的时候总是装配不少,实在不明白怎么回事儿:Person1:Person[name=Carose,car=Car[brand=Audi,price=340000.0],address=Address[country=中国,city=北京]]Person2:Person[name=null,car=Car[brand=Audi,price=340000.0],address=Address[country=中国,city=北京]]Person3:Person[name=null,car=Car[brand=Audi,price=340000.0],address=Address[country=中国,city=北京]]Car.javapackagekys.study.autowire;publicclassCar{privateStringbrand;privatedoubleprice;publicStringgetBrand(){returnbrand;}publicvoidsetBrand(Stringbrand){this.brand=brand;}publicdoublegetPrice(){returnprice;}publicvoidsetPrice(doubleprice){this.price=price;}@OverridepublicStringtoString(){return"Car[brand="+brand+",price="+price+"]";}}Address.javapackagekys.study.autowire;publicclassAddress{privateStringcountry;privateStringcity;publicStringgetCountry(){returncountry;}publicvoidsetCountry(Stringcountry){this.country=country;}publicStringgetCity(){returncity;}publicvoidsetCity(Stringcity){this.city=city;}@OverridepublicStringtoString(){return"Address[country="+country+",city="+city+"]";}}Person.javapackagekys.study.autowire;publicclassPerson{privateStringname;privateCarcar;privateAddressaddress;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicCargetCar(){returncar;}publicvoidsetCar(Carcar){this.car=car;}publicAddressgetAddress(){returnaddress;}publicvoidsetAddress(Addressaddress){this.address=address;}@OverridepublicStringtoString(){return"Person[nname="+name+",ncar="+car+",naddress="+address+"n]";}}bean.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><beanid="name"class="java.lang.String"><constructor-argvalue="Carose"></constructor-arg></bean><beanid="car"class="kys.study.autowire.Car"p:price="340000"p:brand="Audi"></bean><beanid="address"class="kys.study.autowire.Address"p:country="中国"p:city="北京"></bean><beanid="person1"class="kys.study.autowire.Person"p:car-ref="car"p:address-ref="address"p:name-ref="name"></bean><beanid="person2"class="kys.study.autowire.Person"autowire="byName"></bean><beanid="person3"class="kys.study.autowire.Person"autowire="byType"></bean></beans>TestPerson.javapackagekys.study.autowire;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassTestPerson{/***@paramargs*/publicstaticvoidmain(String[]args){ApplicationContextcontext=newClassPathXmlApplicationContext("kys/study/autowire/bean.xml");Personperson1=(Person)context.getBean("person1");Personperson2=(Person)context.getBean("person2");Personperson3=(Person)context.getBean("person3");System.out.println("Person1:n"+person1.toString());System.out.println("Person2:n"+person2.toString());System.out.println("Person3:n"+person3.toString());}}