软件编程
位置:首页>> 软件编程>> java编程>> 基于Spring depends-on的使用详解

基于Spring depends-on的使用详解

作者:王哲晓  发布时间:2021-09-29 16:23:20 

标签: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

来源:https://blog.csdn.net/qushaming/article/details/102605829

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com