zoukankan      html  css  js  c++  java
  • 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的名称

    实例代码具体解释
    代码结构:


    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>
    


  • 相关阅读:
    [javaSE] 数组(获取最值)
    [javascript] Promise简单学习使用
    [javaSE] 基本类型(String相关)
    [android] 手机卫士黑名单功能(ListView结合SQLite增删改)
    [PHP] 重回基础(IO流)
    [PHP] 重回基础(Array相关函数)
    [PHP] 重回基础(date函数和strtotime函数)
    [HTML5] Canvas绘制简单图片
    [javaSE] 集合框架(TreeSet)
    [android] 手机卫士黑名单功能(ListView优化)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5401399.html
Copyright © 2011-2022 走看看