基于Spring depends-on的使用详解

Spring depends-on的使用

通过在XML中的<bean>里配置depends-on属性或者在一个类上使用注解@DependsOn,可以使一个Bean的产生依赖于其他几个Bean。

请看如下代码:

<?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="son" class="com.tyyd.lifecallbacks.domain.Son" depends-on="mother"></bean>    <bean id="mother" class="com.tyyd.lifecallbacks.domain.Mother"></bean></beans>

son这个Bean的产生依赖于mother这个Bean。

Spring Depends-On 不起作用

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.xsd        http://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;    @Override    public 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;    }    @Override    public String toString()    {        return "Car [brand=" + brand + ", price=" + price + "]";    }}
package com.yuxishua.autowire;public class Address{    private String city;    private String street;    @Override    public 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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

你可以很有个性,但某些时候请收敛。

基于Spring depends-on的使用详解

相关文章:

你感兴趣的文章:

标签云: