文档章节

学习Spring(四) -- Spring的继承与依赖

XuePeng77
 XuePeng77
发布于 2016/04/17 22:38
字数 684
阅读 14
收藏 1

继承

    在spring配置文件中,在bean元素里可以使用parent属性来实现配置信息的继承,比如需要十个学生类的bean,其中只有name属性值不同,其他属性都相同:

    <bean id="student1" class="..." p:school="UCLA" p:name="s1" ...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s2"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s3"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s4"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s5"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s6"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s7"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s8"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s9"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s10"...(其他属性) />

    在这种情况下可以使用parent属性来解决配置信息重复的问题:

<!-- 继承配置 -->
    <bean id="abstract_student" p:name="Lily" p:school="UCLA"
        abstract="true"></bean>
    <bean id="student2" class="cn.net.bysoft.lesson3.Student" parent="abstract_student"></bean>
    <bean id="student3" class="cn.net.bysoft.lesson3.Student" p:name="Jordan"
        p:school="NCSU" parent="abstract_student"></bean>

    其中第一个bean是abstract_student,该类有一个属性是abstract=true,将这个bean定义为抽象的,这个bean将不可以被容器get到。接下来的两个bean的parent属性都等于第一个bean的id,也就是继承了抽象bean的配置信息,可以通过重写属性来覆盖抽象bean的配置信息。

@Test
    public void testParent() {
        Student student2 = (Student) ctx.getBean("student2");
        Student student3 = (Student) ctx.getBean("student3");
        System.out.println(student2);
        System.out.println(student3);
        /**
         * output:Student [name=Lily, school=UCLA] 
         * Student [name=Jordan, school=NCSU]
         * */
    }

依赖

    在spring配置文件中,可以强制使一个bean依赖另一个bean,比如,在创建一个person对象时,必须在配置文件中存在一个car的bean。

    使用depends-on属性可以做到以上描述:

<!-- 依赖配置 -->
    <bean id="car3" class="cn.net.bysoft.lesson3.Car" p:name="Audi"
        p:maxSpeed="300" p:price="500000.00" p:color="Red"></bean>
    <bean id="person1" class="cn.net.bysoft.lesson3.Person" p:name="James"
        depends-on="car100" p:car-ref="car3"></bean>

    person1这个bean中的属性depends-on=car100,但是我们的配置文件中没有id=car100的bean,于是在getbean时会发生异常:

@Test
    public void testDependsOn() {
        Person person = (Person) ctx.getBean("person1");
        System.out.println(person);
        /**
         * :警告: Exception encountered during context initialization - cancelling
         * refresh attempt:
         * org.springframework.beans.factory.NoSuchBeanDefinitionException: No
         * bean named 'car100' is defined
         * */
    }

    配置文件中,有一个car3,所以将depends-on=car3,在进行测试:

<!-- 依赖配置 -->
    <bean id="car3" class="cn.net.bysoft.lesson3.Car" p:name="Audi"
        p:maxSpeed="300" p:price="500000.00" p:color="Red"></bean>
    <bean id="person1" class="cn.net.bysoft.lesson3.Person" p:name="James"
        depends-on="car3" p:car-ref="car3"></bean>
@Test
    public void testDependsOn() {
        Person person = (Person) ctx.getBean("person1");
        System.out.println(person);
        /**
         * output:Person [name=James, car=Car [name=Audi, maxSpeed=300,
         * price=500000.0, color=Red]]
         * */
    }

    以上是spring配置文件的继承与依赖机制。

© 著作权归作者所有

XuePeng77
粉丝 47
博文 145
码字总数 193261
作品 0
丰台
私信 提问
spring boot2集成ES详解

一:运行环境 JDK:1.8 ES:5.6.4 二:学习内容 如何构建spring-data-elasticsearch环境? 如何实现常用的增删改查? 如何实现对象嵌套也就是1对多这种关系? 三:JAVA依赖环境 根据spring-...

woter
2018/07/09
4.3K
4
为什么越来越多的开发者选择使用Spring Boot?

一、Web应用开发背景 使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架、库以及整个生态系统。经过这么长时间的发展,Java作为一个成熟的语言,...

Ala6
2018/10/10
131
0
三条路线告诉你如何掌握Spring IoC容器的核心原理

一、前言 前三篇已经从历史的角度和大家一起探讨了为什么会有Spring,Spring的两个核心概念:IoC和AOP的雏形,Spring的历史变迁和如今的生态帝国。本节的主要目的就是通过一个切入点带大家一...

Java小铺
2018/08/27
0
0
集成测试——Spring TestContext框架支持详细解说

概述 集成测试是在单元测试之上,通常是将一个或多个已进行过单元测试的组件组合起来完成的,即集成测试中一般不会出现Mock对象,都是实实在在的真实实现。 对于单元测试,如前边在进行数据访...

呐呐丶嘿
2018/11/26
181
0
springboot冲突导致的发版失败

一、Spring boot因为内嵌tomcat容器,项目发布的时候可以把项目打包为jar包,如何将spring boot项目打包成可发布到tomcat中的war包项目呢?# # 1.需要打包成war包项目,首先需要在pom.xml文件...

坎布里奇
2018/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.5K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部