Spring框架学习(5):bean之间的关系
来源:互联网 发布:淘宝原产地政府背书 编辑:程序博客网 时间:2024/06/05 09:52
这篇文章主要讲一下Bean之间的关系,包括继承和依赖
一、Bean的继承
Bean的继承与Java中的继承是不一样的东西,并不是指子类对父类的继承。Bean的继承是为了使配置多个类似的Bean时可以更加简单。直接看spring bean的配置文件可以更好的说明这一点。
首先写个很简单的Address类:
package beans;public class Address {private String city;private String street;public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}@Overridepublic String toString() {return "Address [city=" + city + ", street=" + street + "]";}}
然后我们在IOC容器中配置两个bean:
<?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 id="address1" class="beans.Address"><property name="city" value="GuangZhou"></property><property name="street" value="Shangxiajiu"></property></bean><bean id="address2" class="beans.Address"><property name="city" value="GuangZhou"></property><property name="street" value="Gongyuanqian"></property></bean></beans>
可以看出,这两个bean的内容大致是相同的,为了简化配置的过程,我们可以使用继承的方法进行配置:
<?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 id="address1" class="beans.Address"><property name="city" value="GuangZhou1"></property><property name="street" value="Shangxiajiu"></property></bean><bean id="address2" parent="address1"><property name="street" value="Gongyuanqian"></property></bean></beans>子bean可以覆盖父bean的属性,如此一来便可以省去许多重复的属性配置。
在上面的例子中,父bean是一个bean实例。除此之外,我们还可以弄一个配置模板作为父bean,即配置一个抽象的bean。
<?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 id="address" class="beans.Address" abstract="true"><property name="city" value="GuangZhou"></property></bean><bean id="address1" parent="address"><property name="street" value="Shangxiajiu"></property></bean><bean id="address2" parent="address"><property name="street" value="Gongyuanqian"></property></bean></beans>需要注意的是,抽象的bean(即abstract属性为true的bean)是不能被实例化的,只是用于模板作用,抽象bean可以不用指定class。
二、bean的依赖
用一个例子说明什么是bean的依赖,写一个Person类,其中存在一个Address类的成员变量:
package beans;public class Person {private String name;private Address address;@Overridepublic String toString() {return "Person [name=" + name + ", address=" + address + "]";}public String getName() {return name;}public void setName(String name) {this.name = name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}}在spring bean的配置文件中配置一个Person 对象:
<?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 id="person" class="beans.Person" depends-on="address"><property name="name" value="Tom"></property></bean></beans>随便写个main函数测试一下就会发现,person可以从IOC容器中获取到,打印出来是这样的情况:Person [name=Tom, address=null]
使用depends-on可以使得在创建person bean之前必须先创建address bean
<?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 id="person" class="beans.Person" depends-on="address"><property name="name" value="Tom"></property></bean></beans>再次用main函数测试一下就会发现,报错了,因为没有实例化id=“address“的bean
如果有多个前置的bean,可以用空格或者逗号隔开
以上就是bean的继承和依赖关系。
0 0
- Spring框架学习(5):bean之间的关系
- Spring 框架Bean之间的关系(继承、依赖)
- spring学习历程---bean之间的关系
- Spring学习笔记(11)------------bean之间的关系
- Spring学习(3)--Bean之间的关系
- 【Spring】Bean之间的关系
- Spring Bean之间的关系
- Spring-bean之间的关系
- spring 5 bean配置--bean之间的关系
- Spring学习第六天:Bean之间的关系
- spring学习笔记四 bean之间的关系
- Spring4 学习笔记(6)-Spring 的 Bean 之间的关系
- 一步一步学习Spring(3)-管理Bean之间的关系一(depends-on)
- 一步一步学习Spring(3)-管理Bean之间的关系二(自动依赖检查)
- Spring学习笔记(五)bean之间的关系与作用范围
- Spring学习笔记(11)——bean之间的关系
- (六)spring的bean之间的关系
- Spring笔记(8)--------<bean>之间的关系
- 剑指offer-链表中环的入口节点-php
- 现代前端技术解析(4)
- [李景山php]每天laravel[035]-laravel 基础知识 --- Eloquent 模型之关系映射
- 科锐课堂笔记:2017/4/10 构造函数与析构函数
- androidSQLite使用
- Spring框架学习(5):bean之间的关系
- 数组,指针
- 04-树5 Root of AVL Tree (25 分)
- POSIX 信号量学习与思考
- 图像的矩,以及利用矩求图像的重心,方向
- 开始学习c语言
- SQLite 清空表格内容,重置自增长为零
- 优化 | 再用传统分页SQL你就死定了
- 剑指offer-面试题10-二进制中1的个数