通過實例解析spring bean之間的關(guān)系
這篇文章主要介紹了通過實例解析spring bean之間的關(guān)系,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
兩種關(guān)系:繼承、依賴
一、繼承關(guān)系
Address.java
package com.gong.spring.beans.autowire;
public class Address {
  private String city;
  private String 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;
  }
  @Override
  public String toString() {
    return "Address [city=" + city + ", street=" + street + "]";
  }
}
beans-relation.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="address" class="com.gong.spring.beans.autowire.Address" p:city="武漢" p:street="絡(luò)南街道"></bean> <!-- 使用parent指定指定哪個bean的配置,子bean可以覆蓋父bean的配置 --> <bean id="address2" class="com.gong.spring.beans.autowire.Address" parent="address" p:street="珞獅街道"></bean> </beans>
Main.java
package com.gong.spring.beans.autowire;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
  public static void main(String[] args) {
    //1.創(chuàng)建spring的IOC容器對象
    ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
    //2.從容器中獲取Bean實例
    Address address = (Address) ctx.getBean("address"); 
    System.out.println(address.toString());
    Address address2 = (Address) ctx.getBean("address2"); 
    System.out.println(address2.toString());
  }
}
輸出:
address2繼承了address的city配置,因此city=武漢。
當(dāng)然,我們也可以使用abstract來表明一個Bean是一個抽象bean。抽象bean可以作為一個模板,且不能被實例化。同時,如果一個bean沒有聲明class,那么該bean也是一個抽象bean,且必須指定abstract="true"。
<bean id="address" class="com.gong.spring.beans.autowire.Address" abstract="true" p:city="武漢" p:street="絡(luò)南街道"></bean>
此時,在進行實例化就會報錯
Address address = (Address) ctx.getBean("address"); 
將抽象bean作為父bean,可以實例化它的子bean:
  Address address2 = (Address) ctx.getBean("address2"); 
  System.out.println(address2.toString());
二、依賴關(guān)系
Car.java
package com.gong.spring.beans.autowire;
public class Car {
  
  public Car() {
  }
  public Car(String name) {
    this.name = name;
  }
  private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  @Override
  public String toString() {
    return "Car [name=" + name + "]";
  }
  
}
Student.java
package com.gong.spring.beans.autowire;
import java.util.List;
import java.util.Map;
public class Student {
  
  private String name;
  private int age;
  private double score;
  private Car car;
  private Address address;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public double getScore() {
    return score;
  }
  public void setScore(double score) {
    this.score = score;
  }
  public Car getCar() {
    return car;
  }
  public void setCar(Car car) {
    this.car = car;
  }
  public Address getAddress() {
    return address;
  }
  public void setAddress(Address address) {
    this.address = address;
  }
  @Override
  public String toString() {
    return "Student [name=" + name + ", age=" + age + ", score=" + score + ", car=" + car + ", address=" + address
        + "]";
  }
  
  
}
beans-relation.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="car" class="com.gong.spring.beans.autowire.Car" p:name="baoma"></bean> <bean id="address" class="com.gong.spring.beans.autowire.Address" p:city="武漢" p:street="絡(luò)南街道"></bean> <!-- 要求配置Student時,要依賴于Car--> <bean id="student" class="com.gong.spring.beans.autowire.Student" p:name="tom" p:age="12" p:score="99.00" autowire="byName" depends-on="car"></bean> </beans>
spring允許用戶通過depends-on屬性設(shè)定bean前置依賴bean,前置依賴bean會在本Bean實例化之前就創(chuàng)建好。如果前置依賴于多個Bean,則可以通過逗號,空格的方式來配置bean的名稱。
Main.java
package com.gong.spring.beans.autowire;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
  public static void main(String[] args) {
    //1.創(chuàng)建spring的IOC容器對象
    ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
    //2.從容器中獲取Bean實例
    Student student = (Student) ctx.getBean("student"); 
    System.out.println(student.toString());
  }
}
輸出:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
您可能感興趣的文章
- 01-10Java實現(xiàn)動態(tài)模擬時鐘
 - 01-10java基于poi導(dǎo)出excel透視表代碼實例
 - 01-10Java實現(xiàn)動態(tài)數(shù)字時鐘
 - 01-10基于Java驗證jwt token代碼實例
 - 01-10使用Swing繪制動態(tài)時鐘
 - 01-10springboot實現(xiàn)文件上傳步驟解析
 - 01-10如何基于SpringBoot部署外部Tomcat過程解析
 - 01-10springboot集成fastDfs過程代碼實例
 - 01-10Java多線程并發(fā)編程和鎖原理解析
 - 01-10Java緩存Map設(shè)置過期時間實現(xiàn)解析
 


閱讀排行
本欄相關(guān)
- 01-10Java實現(xiàn)動態(tài)模擬時鐘
 - 01-10Springboot中@Value的使用詳解
 - 01-10JavaWeb實現(xiàn)郵件發(fā)送功能
 - 01-10利用Java實現(xiàn)復(fù)制Excel工作表功能
 - 01-10Java實現(xiàn)動態(tài)數(shù)字時鐘
 - 01-10java基于poi導(dǎo)出excel透視表代碼實例
 - 01-10java實現(xiàn)液晶數(shù)字字體顯示當(dāng)前時間
 - 01-10基于Java驗證jwt token代碼實例
 - 01-10Java動態(tài)顯示當(dāng)前日期和時間
 - 01-10淺談Java中真的只有值傳遞么
 
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-11ajax實現(xiàn)頁面的局部加載
 - 01-10使用C語言求解撲克牌的順子及n個骰子
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 01-10delphi制作wav文件的方法
 - 01-10C#中split用法實例總結(jié)
 - 08-05織夢dedecms什么時候用欄目交叉功能?
 - 04-02jquery與jsp,用jquery
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 


