spring bean之间的关系:继承;依赖「建议收藏」

spring bean之间的关系:继承;依赖

大家好,又见面了,我是全栈君。

概要:

spring bean之间的关系:继承;依赖「建议收藏」


继承Bean配置

  • Spring同意继承bean的配置,被继承的bean称为父bean。继承这个父Bean的Bean称为子Bean
  • 子Bean从父Bean中继承配置,包含Bean的属性配置
  • 子Bean也能够覆盖从父Bean继承过来的配置
  • 父Bean能够作为配置模版,也能够作为Bean实例,若仅仅想把父Bean作为模版,能够配置<bean>的abstract属性为true。这样Spring将不会实例化这个Bean
  • 并非<bean>元素里的全部属性都会被继承。比方:autowire,abstract等。
  • 能够忽略父Bean的class属性,让子Bean指定自己的类,而共享同样的属性配置,但此时abstract必须设为true


依赖Bean配置

  • Spring同意用户通过depends-on属性设定Bean前置依赖的Bean,前置依赖的Bean会在本Bean实例化之前创建好
  • 假设前置依赖于多个Bean,则能够通过逗号,空格或的方式配置Bean的名称

实例代码具体解释
代码结构:
spring bean之间的关系:继承;依赖「建议收藏」

Main.java

package com.coslay.beans.relation;

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

import com.coslay.beans.autowire.Address;
import com.coslay.beans.autowire.Person;

public class Main {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");
		
		Address address = (Address) ctx.getBean("address3");
		System.out.println(address);
		
		address = (Address) ctx.getBean("address2");
		System.out.println(address);
		
		Person person = (Person) ctx.getBean("person");
		System.out.println(person);
	}
}


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的class属性没有指定,则该bean必须是一个抽象bean-->	
	<bean id="address" 
		p:city="Beijing" p:street="WuDaoKou" abstract="true"></bean>
		
	<!-- <bean id="address2" class="com.coslay.beans.autowire.Address"
		p:city="Beijing" p:street="DaZhongSi"></bean> -->
	<!-- bean 配置的继承:使用bean 的parent 属性指定继承哪个baen的配置 -->
	<bean id="address2" class="com.coslay.beans.autowire.Address" 
		parent="address"></bean>
		
	<bean id="address3" class="com.coslay.beans.autowire.Address" 
		p:street="DaZhongSi" parent="address2"></bean>
	
	<bean id="car" class="com.coslay.beans.autowire.Car"
		p:brand="Audi" p:price="300000"></bean>
	
	<!-- 
		要求在配置Person时。必须有一个关联的car!换句话说person这个bean依赖于Car这个bean
	 -->
	<bean id="person" class="com.coslay.beans.autowire.Person"
		p:name="Tom" p:address-ref="address2" depends-on="car"></bean>
	
</beans>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115296.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 用thinkphp开启伪静态,用wamp开启很快搞定;但是用phpstudy总是开启失败,为什么?…

    用thinkphp开启伪静态,用wamp开启很快搞定;但是用phpstudy总是开启失败,为什么?…

    2021年10月15日
  • C语言的数组初始化「建议收藏」

    C语言的数组初始化「建议收藏」   这是很基础的东西,但基础的重要性不言而喻,我敢肯定这个知识点我肯定曾经了解过,但现在,我不敢确定,由此可见纪录的重要性,这世界没有什么捷径,找对方向,然后不停重复.所以从今天开始,我会比较详细的纪录这些比较小的知识点,其实还是有不少有意思的地方的.   写这篇文章的起因在于>第七章新东西太多,看的我目不暇接,所以在网上找了些例子看,其中就有一个例子中出现了这样的语句: …

  • Charles抓包神器

    Charles抓包神器Charles抓包神器Charles抓包过程插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接…

  • 数据库系统的特点_关系数据模型只能表示

    数据库系统的特点_关系数据模型只能表示数据结构化:数据库系统实现整体数据的结构化,是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。“整体”结构化是指在数据库中的数据不再仅仅针对某一应用,而是面向全组织,不仅数据内部结构化,

  • idea2021.11.3激活码(JetBrains全家桶)

    (idea2021.11.3激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1HV55HYOZP-eyJsaWNlb…

  • 您的CPU支持该TensorFlow二进制文件未编译为使用的指令:AVX AVX2[通俗易懂]

    您的CPU支持该TensorFlow二进制文件未编译为使用的指令:AVX AVX2[通俗易懂]IamnewtoTensorFlow.我是TensorFlow的新手。Ihaverecentlyinstalledit(WindowsCPUversion)andrec

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号