基于Spring depends-on的使用詳解
Spring depends-on的使用
通過在XML中的<bean>里配置depends-on屬性或者在一個類上使用注解@DependsOn,可以使一個Bean的產(chǎn)生依賴于其他幾個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的產(chǎn)生依賴于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 必須有一個關(guān)聯(lián)的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;
}
}
就上面的代碼,結(jié)果輸出
Person [name=Tom, address=Address [city=Beijing, street=HanSenLU], car=null]
car 為什么沒有注入呢,是spring版本的問題嗎?還是什么原因?
spring為4.0.8
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis-plus使用TableNameHandler分表詳解(附完整示例源碼)
這篇文章主要介紹了Mybatis-plus使用TableNameHandler分表詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
IDEA創(chuàng)建的maven項目中pom.xml增加新依賴無效問題及解決
在IDEA中,解決maven項目pom.xml增加依賴但外部庫未更新的問題,可以通過設(shè)置"構(gòu)建腳本更改后同步項目"選項為"任何更改",然后刷新Maven項目來解決2025-01-01
idea中文件被Mark as Plain Text后恢復(fù)方式
在IntelliJ IDEA中,如果錯誤地將文件標記為純文本(Mark as Plain Text),可以通過在項目目錄中右鍵點擊文件并選擇“Mark as”來恢復(fù)原文件類型2024-11-11
SpringBoot?@DS注解實現(xiàn)多數(shù)據(jù)源配置以及問題解決辦法
這篇文章主要給大家介紹了關(guān)于SpringBoot?@DS注解實現(xiàn)多數(shù)據(jù)源配置以及問題解決辦法,所謂多數(shù)據(jù)源就是一個Java EE項目中采用了不同數(shù)據(jù)庫實例中的多個庫,或者是同一個數(shù)據(jù)庫實例中的多個不同庫,需要的朋友可以參考下2023-11-11

