好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

基于Spring depends-on的使用详解

Spring depends-on的使用

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

请看如下代码:

?

1

2

3

4

5

6

7

<? 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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<? 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 >

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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);

        

     }

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

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;

     }

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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 + "]" ;

     }

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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

查看更多关于基于Spring depends-on的使用详解的详细内容...

  阅读:19次