Spring學習記錄(四)---bean之間的關系:繼承、依賴


     繼承

這里說的繼承和java的繼承是不一樣的,不是父類子類。但思想很相似,是父bean和子bean

1、父bean是一個實例時。它本身是一個完整的bean

2、父bean是模板,抽象bean,不能被實例化,只是來被繼承。

 

當遇到一個類要實例化出很多相似的bean對象時,如下,看起來是不是很不簡潔

1     <bean id="address1" class="com.guigu.spring.autowire.Address"
2     p:city="BeiJing" p:street="yihuan"></bean>
3     <bean id="address2" class="com.guigu.spring.autowire.Address"
4     p:city="BeiJing" p:street="erhuan"></bean>

方法① 兩個bean除了p:street不一樣,其他都一樣。可以把一個作為父bean,其它的繼承這個bean

1      <bean id="address1" class="com.guigu.spring.autowire.Address"
2      p:city="BeiJing" p:street="yihuan"></bean>
3      <bean id="address2"  p:street="erhuan" parent="address1"></bean>
4    // address2等價於:
5    //  <bean id="address2"" class="com.guigu.spring.autowire.Address"
6  //  p:city="BeiJing" p:street="erhuan"></bean>

這里,第二個就繼承了第一個bean,用parent屬性,只寫自己獨有的屬性或要覆蓋的屬性即可。

方法②把相同屬性提取出來,做一個抽象bean,專門用來繼承

1 <bean id="address1" class="com.guigu.spring.autowire.Address"
2     p:city="BeiJing" p:street="yihuan" abstract="true"></bean>
3 <bean id="address2" p:street="erhuan" parent="address1"></bean>

這樣,address2也繼承了address1。address1設置了abstract="true",就不能實例化,否則拋異常。

也可以寫成這樣:

1  <bean id="address1" p:city="BeiJing" p:street="yihuan" abstract="true"></bean>
2  <bean id="address2" class="com.guigu.spring.autowire.Address" p:street="erhuan" parent="address1"></bean>

和上面的不同就是把class屬性拿出去了。當很多不是同一個類的bean要繼承父bean時,就要這樣,在子bean寫自己所在的class。

這樣寫還有一點是,這個父bean一定不能實例化,因為它沒有class屬性,實例化會跑異常。那就一定要寫abstract屬性,讓spring不實例化它。

 

     依賴---depends-on

用Person類的例子

 1 public class Person {
 2     private String name;
 3     private Car car;
 4     
 5     public String getName() {
 6         return name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public Car getCar() {
12         return car;
13     }
14     public void setCar(Car car) {
15         this.car = car;
16     }
17     @Override
18     public String toString() {
19         return "Person [name=" + name + ", car=" + car + "]";
20     }
21 }

 

 有一個屬性Car沒有配置,那實例化后,它就是null。

1  <bean id="person" class="com.guigu.spring.autowire.Person"
2      p:name="Evan"></bean>

 

 有時,我們需要讓某個屬性必須存在,就像必填項一樣。 用depends-on 依賴

1   <bean id="person" class="com.guigu.spring.autowire.Person"
2       p:name="Evan" depends-on="car"></bean>

 

這樣表示,實例化person一定要依賴car,沒有配置car會拋異常

1  <bean id="car" class="com.guigu.spring.autowire.Car" p:brand="Audi" p:price="200000"></bean>
2  <bean id="person" class="com.guigu.spring.autowire.Person"
3        p:name="Evan" depends-on="car"></bean>

 

這樣,依賴的car存在,就可以正常實例化了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM