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>

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

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

(0)
上一篇 2022年2月6日 下午1:00
下一篇 2022年2月6日 下午1:00


相关推荐

  • Claude Code 国内使用完整指南 – 无需科学上网直接用

    Claude Code 国内使用完整指南 – 无需科学上网直接用

    2026年3月16日
    1
  • C++大数运算_size_t几个字节

    C++大数运算_size_t几个字节#include<cstring>#include<string>#include<iostream>usingnamespacestd;constexprautoMAXN=9999;constexprautoMAXSIZE=1000;constexprautoDLEN=4;classBigN{priv…

    2026年4月17日
    3
  • java中线程安全的容器_jfinal容器线程安全吗

    java中线程安全的容器_jfinal容器线程安全吗四、线程安全的容器类Java编码中,我们经常需要用到容器来编程。在并发环境下,Java提供一些已有容器能够支持并发。1.Map在Map类中,提供两种线程安全容器。java.util.HashtableHashtable和HashMap类似,都是散列表,存储键值对映射。主要区别在于Hashtable是线程安全的。当我们查看Hashtable源码的时候,可以看到Hashtable的方法都是通过syn

    2025年11月4日
    5
  • JAVA 集群技术

    JAVA 集群技术JAVA 集群技术学习 nbsp nbsp nbsp JAVA 集群 一组相互独立 通过高速网络互联的计算机 他们组成了一个组 并以单一系统模式加以管理 基本术语 1 伸缩性在一些大型的系统中 预测用户量和行为是非常困难的 伸缩性是指系统适应不断增长的用户量的能力 去适应一个增长的过程 提高这种并发会话能力最直接的方法就是提高 cpu 内存 磁盘等 集群是解决这个问题的另外一种方法 它允许一组服务器组在一起

    2026年3月18日
    2
  • 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    2022年1月29日
    47
  • C语言位运算之异或

    C语言位运算之异或运算符在任何一门编程语言中都占有不可磨灭的地位 今天我则要说一个运算符中的位运算中的异或 因为它不比其他运算符 也容易被我们忽视 但有时候他的作用还是蛮大的 下面我则以一道习题来和大家讨论一下异或这个运算符 例 一组数据中只有一个数字出现了一次 其他所有数字都是成对出现的 请找出这个数字 思路 乍一看 我也有点懵 看似简单的一道题 我却无从下手 但仔细想想我便想到了异或 它的规则如下 相同为

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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