两种关系: 继承, 依赖
一, 继承关系
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="络南街道"></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. 创建 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 = 武汉.
当然, 我们也可以使用 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="络南街道"></bean>
此时, 在进行实例化就会报错
Address address = (Address) ctx.getBean("address");
将抽象 bean 作为父 bean, 可以实例化它的子 bean:
- Address address2 = (Address) ctx.getBean("address2");
- System.out.println(address2.toString());
二, 依赖关系
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="络南街道"></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 属性设定 bean 前置依赖 bean, 前置依赖 bean 会在本 Bean 实例化之前就创建好. 如果前置依赖于多个 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. 创建 spring 的 IoC 容器对象
- ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
- //2. 从容器中获取 Bean 实例
- Student student = (Student) ctx.getBean("student");
- System.out.println(student.toString());
- }
- }
输出:
来源: http://www.bubuko.com/infodetail-3366804.html