基于Spring depends-on的使用詳解
通過(guò)在XML中的<bean>里配置depends-on屬性或者在一個(gè)類(lèi)上使用注解@DependsOn,可以使一個(gè)Bean的產(chǎn)生依賴(lài)于其他幾個(gè)Bean。
請(qǐng)看如下代碼:<?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 depends-on='mother'></bean> <bean class='com.tyyd.lifecallbacks.domain.Mother'></bean></beans>
son這個(gè)Bean的產(chǎn)生依賴(lài)于mother這個(gè)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.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd'><!-- abstract='true' 則不能獲得這個(gè)bean 說(shuō)明它只是一個(gè)模板,只能被繼承 --> <bean p:city='Beijing' p:street='ChangAnLu' abstract='true'> </bean><!-- 繼承bean的配置使用parent 屬性,但是沒(méi)有java 繼承的意思 --> <bean parent='address' p:street='HanSenLU'> </bean><!-- 要求person bean 必須有一個(gè)關(guān)聯(lián)的car ,意思就是說(shuō)這個(gè)bean依賴(lài)car這個(gè)bean --> <bean depends-on='car' p:name='Tom' p:address-ref='address2' > </bean> <bean 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 為什么沒(méi)有注入呢,是spring版本的問(wèn)題嗎?還是什么原因?
spring為4.0.8
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 低版本IE正常運(yùn)行HTML5+CSS3網(wǎng)站的3種解決方案2. xml文件的結(jié)構(gòu)解讀第1/2頁(yè)3. jsp實(shí)現(xiàn)局部刷新頁(yè)面、異步加載頁(yè)面的方法4. Jsp中request的3個(gè)基礎(chǔ)實(shí)踐5. vue根據(jù)條件不同顯示不同按鈕的操作6. IntelliJ IDEA 2021.1 EAP 4 發(fā)布:字體粗細(xì)可調(diào)整Git commit template 支持7. 簡(jiǎn)單了解JavaScript作用域8. js中的正則表達(dá)式(一)9. IntelliJ-Idea導(dǎo)出可執(zhí)行Jar流程解析10. Django使用redis配置緩存的方法
