Spring之Bean之间继承依赖关系

Bean之间的继承关系

1.Spring允许继承bean的配置,被继承的bean称为父bean。继承这个父Bean的Bean称为子Bean
2.子Bean从父Bean中继承配置,包括Bean的属性配置,子Bean也可以覆盖从父Bean继承过来的配置。
3.父Bean可以作为配置模板,也可以作为Bean实例,若只想把父Bean作为模板,可以设置<Bean>的abstract属性为true,
这样Spring将不会实例化这个Bean
4.并不是<Bean>元素里的所有属性都会被继承,比如:autowire,abstract就不会被继承
5.也可以忽略父Bean的class属性,让子Bean指定自己的类,而共享相同的属性配置,但此时abstract必须设置为true。

在这里插入图片描述

基础类 :Address.java
package com.lanou3g.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 + "]";
	}
	
}
测试类:test.java
package com.lanou3g.bean.relations;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.lanou3g.autowire.Address;

public class Test {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
		
		Address address1 = (Address)ctx.getBean("address1");
		System.out.println(address1);
		
		Address address2 = (Address)ctx.getBean("address2");
		System.out.println(address2);
	}
}
情景一
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="address1" class="com.lanou3g.autowire.Address"
		p:city="Beijing" p:street="Nanjinglu"></bean>
	<bean id="address2" class="com.lanou3g.autowire.Address"
		p:city="Shanghai" p:street="Henanlu"></bean>

</beans>
运行结果

在这里插入图片描述

情景二
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="address1" class="com.lanou3g.autowire.Address"
		p:city="Beijing" p:street="Nanjinglu"></bean>
		<!-- 继承未有的属性,覆盖已有的属性 -->
	<bean id="address2" class="com.lanou3g.autowire.Address"
		 p:street="Henanlu" parent="address1"></bean>

</beans>
运行结果

在这里插入图片描述

情景三
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="address1" class="com.lanou3g.autowire.Address"
		p:city="Beijing" p:street="Nanjinglu"></bean>
	<bean id="address2" p:street="Henanlu" parent="address1"></bean>

</beans>
运行结果

在这里插入图片描述

情景四-abstract的使用
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">
	<!-- 此时获取address1的实例将会报错 -->
	<bean id="address1" class="com.lanou3g.autowire.Address"
		p:city="Beijing" p:street="Nanjinglu" abstract="true"></bean>
	<bean id="address2" p:street="Henanlu" parent="address1"></bean>
</beans>
运行结果

在这里插入图片描述

情景五-abstract的使用
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,bean的abstract属性为true的bean,这样的Bean不能被IOC实例化,只用来被继承配置 -->
	<bean id="address1" p:city="Beijing" p:street="Nanjinglu" abstract="true"></bean>
	<!-- 父Bean的class可以省略,但是此时子类的Class就不能省略 -->
	<bean id="address2" class="com.lanou3g.autowire.Address"
	 p:street="Henanlu" parent="address1"></bean>
</beans>
运行结果

在这里插入图片描述

Bean之间的依赖关系

1.Spring允许用户通过depends-on属性设定Bean前置依赖的Bean,前置依赖的Bean会在本Bean实例化之前创建好
2.如果前置依赖于多个Bean,则可以通过逗号,空格或的方式配置Bean的名称
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.lanou3g.autowire.Address"
	 p:street="Henanlu" ></bean>
	 
	 <bean id="car" class="com.lanou3g.autowire.Car"
	 p:brand="Baoma" p:price="30000"></bean>
	 
	 <bean id="person" class="com.lanou3g.autowire.Person"
	 p:name="张三" p:age="5620" p:address-ref="address" depends-on="car"></bean>
</beans>

test.java
public class Test {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
		
		
		Address address2 = (Address)ctx.getBean("address");
		System.out.println(address2);
		
		Person person = ctx.getBean(Person.class);
		System.out.println(person);
	}
}
运行结果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值