通過實(shí)例解析spring bean之間的關(guān)系
這篇文章主要介紹了通過實(shí)例解析spring bean之間的關(guān)系,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
兩種關(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指定指定哪個(gè)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容器對(duì)象
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
//2.從容器中獲取Bean實(shí)例
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來表明一個(gè)Bean是一個(gè)抽象bean。抽象bean可以作為一個(gè)模板,且不能被實(shí)例化。同時(shí),如果一個(gè)bean沒有聲明class,那么該bean也是一個(gè)抽象bean,且必須指定abstract="true"。
<bean id="address" class="com.gong.spring.beans.autowire.Address" abstract="true" p:city="武漢" p:street="絡(luò)南街道"></bean>
此時(shí),在進(jìn)行實(shí)例化就會(huì)報(bào)錯(cuò)
Address address = (Address) ctx.getBean("address");

將抽象bean作為父bean,可以實(shí)例化它的子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時(shí),要依賴于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會(huì)在本Bean實(shí)例化之前就創(chuàng)建好。如果前置依賴于多個(gè)Bean,則可以通過逗號(hào),空格的方式來配置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容器對(duì)象
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
//2.從容器中獲取Bean實(shí)例
Student student = (Student) ctx.getBean("student");
System.out.println(student.toString());
}
}
輸出:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring為IOC容器注入Bean的五種方式詳解
- spring boot過濾器FilterRegistrationBean實(shí)現(xiàn)方式
- Spring在代碼中獲取bean的幾種方式詳解
- Spring動(dòng)態(tài)加載bean后調(diào)用實(shí)現(xiàn)方法解析
- springboot 使用上下文獲取bean
- spring-boot @Component和@Bean的區(qū)別詳解
- 詳解SpringBoot 多線程處理任務(wù) 無法@Autowired注入bean問題解決
- spring中通過ApplicationContext getBean獲取注入對(duì)象的方法實(shí)例
相關(guān)文章
淺談Java之Map 按值排序 (Map sort by value)
下面小編就為大家?guī)硪黄獪\談Java之Map 按值排序 (Map sort by value)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
使用Spring Initializr方式如何快速構(gòu)建Spring Boot項(xiàng)目
Spring lnitializr是一個(gè)Web應(yīng)用,它提供了一個(gè)基本的項(xiàng)目結(jié)構(gòu),能夠幫助我們快速構(gòu)建一個(gè)基礎(chǔ)的Spring Boot項(xiàng)目,本文分步驟講解如何使用Spring Initializr方式構(gòu)建Spring Boot項(xiàng)目,感興趣的朋友跟隨小編一起看看吧2023-08-08
Spring Boot加密配置文件特殊內(nèi)容的示例代碼詳解
這篇文章主要介紹了Spring Boot加密配置文件特殊內(nèi)容的相關(guān)知識(shí),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

