beans-realation.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- abstract="true" 则不能获得这个bean 说明它只是一个模板,只能被继承 --><bean id = "address" class="com.yuxishua.autowire.Address" p:city="Beijing" p:street="ChangAnLu" abstract="true"></bean> <!-- 继承bean的配置使用parent 属性,但是没有java 继承的意思 --><bean id = "address2" parent="address" p:street="HanSenLU"></bean> <!-- 要求person bean 必须有一个关联的car ,意思就是说这个bean依赖car这个bean --><bean id = "person" depends-on="car" class="com.yuxishua.autowire.Person" p:name="Tom" p:address-ref="address2" ></bean><bean id = "car" class="com.yuxishua.autowire.Car" p:brand="AuDi" p:price="30000"></bean> </beans>
package com.yuxishua.beansrelation;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;import com.yuxishua.autowire.Address; import com.yuxishua.autowire.Car; import com.yuxishua.autowire.Person;public class Main {public static void main(String[] args){ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-realation.xml");Person person = (Person) ctx.getBean("person");Address address2 = (Address) ctx.getBean("address2");Car car = (Car) ctx.getBean("car");System.out.println(address2 );System.out.println(person);System.out.println(car);}}
package com.yuxishua.autowire;public class Person {private String name;private Address address;private Car car;@Overridepublic String toString(){return "Person [name=" + name + ", address=" + address + ", car=" + car+ "]";}public String getName(){return name;}public void setName(String name){this.name = name;}public Address getAddress(){return address;}public void setAddress(Address address){this.address = address;}public Car getCar(){return car;}public void setCar(Car car){this.car = car;}}
package com.yuxishua.autowire;public class Car {private String brand;private double price;public String getBrand(){return brand;}public void setBrand(String brand){this.brand = brand;}public double getPrice(){return price;}public void setPrice(double price){this.price = price;}@Overridepublic String toString(){return "Car [brand=" + brand + ", price=" + price + "]";}}
package com.yuxishua.autowire;public class Address {private String city;private String street;@Overridepublic String toString(){return "Address [city=" + city + ", street=" + street + "]";}public String getCity(){return city;}public void setCity(String city){this.city = city;}public String getStreet(){return street;}public void setStreet(String street){this.street = street;}}
就上面的代码,结果输出
Person [name=Tom, address=Address [city=Beijing, street=HanSenLU], car=null]
car 为什么没有注入呢,是spring版本的问题吗?还是什么原因?
spring为4.0.8