bean之间的关系:继承、依赖
继承
这里说的继承和java的继承是不一样的,不是父类子类。但思想很相似,是父bean和子bean
1、父bean是一个实例时。它本身是一个完整的bean
2、父bean是模板,抽象bean,不能被实例化,只是来被继承。
当遇到一个类要实例化出很多相似的bean对象时,如下,看起来是不是很不简洁
1 <bean id="address1" class="com.guigu.spring.autowire.Address"
2 p:city="BeiJing" p:street="yihuan"></bean>
3 <bean id="address2" class="com.guigu.spring.autowire.Address"
4 p:city="BeiJing" p:street="erhuan"></bean>
方法① 两个bean除了p:street不一样,其他都一样。可以把一个作为父bean,其它的继承这个bean
1 <bean id="address1" class="com.guigu.spring.autowire.Address"
2 p:city="BeiJing" p:street="yihuan"></bean>
3 <bean id="address2" p:street="erhuan" parent="address1"></bean>
4 // address2等价于:
5 // <bean id="address2"" class="com.guigu.spring.autowire.Address"
6 // p:city="BeiJing" p:street="erhuan"></bean>
这里,第二个就继承了第一个bean,用parent属性,只写自己独有的属性或要覆盖的属性即可。
方法②把相同属性提取出来,做一个抽象bean,专门用来继承
1 <bean id="address1" class="com.guigu.spring.autowire.Address"
2 p:city="BeiJing" p:street="yihuan" abstract="true"></bean>
3 <bean id="address2" p:street="erhuan" parent="address1"></bean>
这样,address2也继承了address1。address1设置了abstract="true",就不能实例化,否则抛异常。
也可以写成这样:
1 <bean id="address1" p:city="BeiJing" p:street="yihuan" abstract="true"></bean>
2 <bean id="address2" class="com.guigu.spring.autowire.Address" p:street="erhuan" parent="address1"></bean>
和上面的不同就是把class属性拿出去了。当很多不是同一个类的bean要继承父bean时,就要这样,在子bean写自己所在的class。
这样写还有一点是,这个父bean一定不能实例化,因为它没有class属性,实例化会跑异常。那就一定要写abstract属性,让spring不实例化它。
依赖---depends-on
用Person类的例子
1 public class Person {
2 private String name;
3 private Car car;
4
5 public String getName() {
6 return name;
7 }
8 public void setName(String name) {
9 this.name = name;
10 }
11 public Car getCar() {
12 return car;
13 }
14 public void setCar(Car car) {
15 this.car = car;
16 }
17 @Override
18 public String toString() {
19 return "Person [name=" + name + ", car=" + car + "]";
20 }
21 }
有一个属性Car没有配置,那实例化后,它就是null。
1 <bean id="person" class="com.guigu.spring.autowire.Person"
2 p:name="Evan"></bean>
有时,我们需要让某个属性必须存在,就像必填项一样。 用depends-on 依赖
1 <bean id="person" class="com.guigu.spring.autowire.Person"
2 p:name="Evan" depends-on="car"></bean>
这样表示,实例化person一定要依赖car,没有配置car会抛异常
1 <bean id="car" class="com.guigu.spring.autowire.Car" p:brand="Audi" p:price="200000"></bean>
2 <bean id="person" class="com.guigu.spring.autowire.Person"
3 p:name="Evan" depends-on="car"></bean>
这样,依赖的car存在,就可以正常实例化了
bean之间的关系:继承、依赖的更多相关文章
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring(九):Spring配置Bean(二)自动装配的模式、Bean之间的关系
XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,模式包含:byType,byName, ...
- 3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/
1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 -& ...
- Spring Bean之间的关系
bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括 ...
- Bean之间的关系
Bean之间主要有继承和依赖的关系,这里的继承并不是我们面向对象里面所提到的继承. 继承 我们先来创建一个新的配置文件beans-relation.xml <bean id="addr ...
- 峰Spring4学习(5)bean之间的关系和bean的作用范围
一.bean之间的关系: 1)继承: People.java实体类: package com.cy.entity; public class People { private int id; priv ...
- Spring学习--Bean 之间的关系
Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...
- Spring初学之bean之间的关系和bean的作用域
一.bean之间的关系 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...
- XML配置里的Bean自动装配与Bean之间的关系
需要在<bean>的autowire属性里指定自动装配的模式 byType(根据类型自动装配) byName(根据名称自动装配) constructor(通过构造器自动装配) 名字须与属性 ...
- Spring_自动装配 & bean之间的关系 & bean的作用域
1.自动装配 beans-autowire.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...
随机推荐
- [jquery]判断页面滚动到顶部和底部(适用于手机web加载)
//判断页面滚动到顶部和底部 $(window).scroll(function(){ var doc_height = $(document).height(); var scroll_top = ...
- xcode运行push通知总是提示输入用户名和密码
xcode运行push通知总是提示输入用户名和密码,目前找到的解决方案是, 打开钥匙串,然后找到push证书下面的私有密钥,双击进入将访问控制设置为允许全部访问,即可.
- php处理图片实现
<?php include("SimpleImage.php");//图片处理类在下面 $url="http://f3.v.veimg.cn/meadincms/1 ...
- 阿里云CentOS配置全过程
1. 安装基本依赖包 yum install gcc gcc-c++ autoconf automake 2. 升级所有 yum update 3.安装mongodb 1. 配置mongodb- ...
- jvm学习
一.jps主要用来输出JVM中运行的进程状态信息 jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器. Jps -ml 二.jstack主要用来查看某个Jav ...
- iOS小技巧总结,绝对有你想要的
原文链接 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIV ...
- Retrofit学习入门
Retrofit的使用 设置权限与添加依赖 定义请求接口 通过创建一个retrofit生成一个接口的实现类(动态代理) 调用接口请求数据 设置权限与添加依赖 权限:首先确保在AndroidManife ...
- CocoaPods 安装
虽然网上关于CocoaPods安装教程多不胜数,但是我在安装的过程中还是出现了很多错误,所以大家可以照下来步骤装一下,我相信会很好用. 前言 在iOS项目中使用第三方类库可以说是非常常见的事,但是要正 ...
- Eclipse 快捷键 转换为Netbeans 快捷键
一直使用netbeans IDE开发,习惯了netbeans的快捷键,最近要开发个app就选择了H5. 接着使用了HBuilder (基于Eclipse开发) 总体来讲这个IDE还可以,不管是代码提示 ...
- 【Java EE 学习 21 上】【其它类型的监听器】【使用HttpSessionActivationListener监听session的活化和钝化】
一.ServletContextListener Method Summary void contextDestroyed(ServletContextEvent sce) R ...