`

Spring Bean定义的继承

阅读更多

现有Bean2,Bean3,Bean4,Bean5

可观察到Bean2引用了其它三个Bean,而Bean3的属性为id,name,date;Bean4属性为id,name;Bean5为date

那么是不是可以将id,name抽取出来进行配置,从而相当于构建一个继承关系。

代码:

package com.lwf.bean;

public class Bean2 {

	private Bean3 bean3;
	private Bean4 bean4;
	private Bean5 bean5;
	
	public Bean3 getBean3() {
		return bean3;
	}
	public void setBean3(Bean3 bean3) {
		this.bean3 = bean3;
	}
	public Bean4 getBean4() {
		return bean4;
	}
	public void setBean4(Bean4 bean4) {
		this.bean4 = bean4;
	}
	public Bean5 getBean5() {
		return bean5;
	}
	public void setBean5(Bean5 bean5) {
		this.bean5 = bean5;
	}
	
}

 

package com.lwf.bean;

import java.util.Date;

public class Bean3 {

	private int id;
	private String name;
	private Date date;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
}

 

package com.lwf.bean;

public class Bean4 {

	private int id;
	private String name;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 

package com.lwf.bean;

public class Bean5 {

	private int age;

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
}

 

package com.lwf.bean;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class UtilDatePropertiesEditor extends PropertyEditorSupport {

	private String format="yyyy/MM/dd" ;
	public void setAsText(String text) throws IllegalArgumentException {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try {
			Date dateVal = sdf.parse(text);
			this.setValue(dateVal);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
	}
	
	public void setFormat(String format){
		this.format = format;
	}

}

 配置文件:

applicationContext.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:aop="http://www.springframework.org/schema/aop"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
					<bean class="com.lwf.bean.UtilDatePropertiesEditor">
						<property name="format" value="yyyy/MM/dd"/>
					</bean>
				</entry>
			</map>
		</property>
	</bean>

	
	<bean id="bean2" class="com.lwf.bean.Bean2">
		<property name="bean3" ref="bean3"/>
		<property name="bean4">
			<ref bean="bean4"/>
		</property>
		<property name="bean5">
			<bean id="bean5" class="com.lwf.bean.Bean5">
				<property name="age" value="30"></property>
			</bean>
		</property>
	</bean>
	
	
</beans>

 

applicationContext_1.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:aop="http://www.springframework.org/schema/aop"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<bean id="parentBean" abstract="true">
		<property name="id" value="1"/>
		<property name="name" value="zhang"/>
	</bean>
	
	<bean id="bean3" class="com.lwf.bean.Bean3" parent="parentBean">
		<property name="date" value="2010/05/19"/>
	</bean>
	
	<bean id="bean4" class="com.lwf.bean.Bean4" parent="parentBean"/>
	
</beans>

 

测试类:

package com.lwf.client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.lwf.bean.Bean2;

public class Client {
	public static void main(String[] args) {
			
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext*.xml");
		Bean2 bean2 = (Bean2)ctx.getBean("bean2");
		System.out.println(bean2.getBean3().getName());
		System.out.println(bean2.getBean3().getId());
		System.out.println(bean2.getBean3().getDate());
		System.out.println(bean2.getBean4().getId());
		System.out.println(bean2.getBean4().getName());
		System.out.println(bean2.getBean5().getAge());
	}
}

 

输出:

2010-05-19 10:14:28,122 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@bfbdb0: display name [org.springframework.context.support.ClassPathXmlApplicationContext@bfbdb0]; startup date [Wed May 19 10:14:28 CST 2010]; root of context hierarchy
2010-05-19 10:14:28,310 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from file [D:\workdirlocal\spring_start\bin\applicationContext.xml]
2010-05-19 10:14:28,716 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from file [D:\workdirlocal\spring_start\bin\applicationContext_1.xml]
2010-05-19 10:14:28,794 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] - Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@bfbdb0]: org.springframework.beans.factory.support.DefaultListableBeanFactory@16df84b
2010-05-19 10:14:28,981 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@16df84b: defining beans [customEditorConfigurer,bean2,parentBean,bean3,bean4]; root of factory hierarchy
zhang
1
Wed May 19 00:00:00 CST 2010
1
zhang
30

 

 

注意在配置文件里面定义的继承关系

 

依赖对象的注入,可以采用:
    * ref属性
    * <ref>标签
    * 内部<bean>的定义
    
----------------------------------------------------------------------------------------------------------
如何将公共的注入定义描述出来:
	* 定义公共的注入属性(通过<bean>标签定义,指定abstract="true")
	* 具有相同注入属性的类,指定parent属性即可

 

分享到:
评论

相关推荐

    spring入门教程之bean的继承与自动装配详解

    众所周知Spring里面的bean就类似是定义的一个组件,而这个组件的作用就是实现某个功能的,下面这篇文章主要给大家介绍了关于spring入门教程之bean继承与自动装配的相关资料,需要的朋友可以参考借鉴,下面随着小编来...

    JAVA spring 系列案例50个和学习资料

    Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式你们都知道?Spring系列第6篇:玩转bean scope,避免跳坑里!Spring系列第7篇:依赖注入之手动注入Spring系列第8篇:自动注入...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.1.1. 使用BeanPostProcessor的Hello World示例 3.7.1.2. RequiredAnnotationBeanPostProcessor示例 3.7.2. 用...

    Spring 2.0 开发参考手册

    3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用...

    Spring中文帮助文档

    3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. ...

    spring in action英文版

     10.2.2 装载Spring Bean至Tapestry页面中  10.3 集成JavaServer Faces  10.3.1 解析变量  10.3.2 发布请求已处理事件  10.4 集成WebWork  10.4.1 WebWork1  10.4.2 XWork/WebWork2  10.5 小...

    Spring API

    3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. ...

    Spring攻略(第二版 中文高清版).part1

    1.13 继承Bean配置 47 1.13.1 问题 47 1.13.2 解决方案 47 1.13.3 工作原理 48 1.14 从Classpath中扫描组件 50 1.14.1 问题 50 1.14.2 解决方案 51 1.14.3 工作原理 51 1.15 小结 56 第2章 高级...

    开源框架 Spring Gossip

    第一个 Spring MVC 程式 WebApplicationContext Handler Mapping Handler Interceptor Controller 继承架构 ModelAndView View Resolver Exception Resolver 使用 Controller ...

    spring chm文档

    3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用...

    Spring 3 Reference中文

    4.7 Bean 定义的继承. 77 4.8 容器扩展点. 78 4.8.1 使用BeanPostProcessor 来自定义bean 78 4.8.1.1 示例:BeanPostProcessor 风格的Hello World.. 79 4.8.1.2 示例:...

    Spring攻略(第二版 中文高清版).part2

    1.13 继承Bean配置 47 1.13.1 问题 47 1.13.2 解决方案 47 1.13.3 工作原理 48 1.14 从Classpath中扫描组件 50 1.14.1 问题 50 1.14.2 解决方案 51 1.14.3 工作原理 51 1.15 小结 56 第2章 高级...

    Spring.3.x企业应用开发实战(完整版).part2

    4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 不同配置方式比较 4.13 小结 第5章 Spring容器高级主题 5.1 Spring容器技术内幕 5.1.1 内部工作机制 5.1.2 BeanDefinition ...

    spring aop 实现源代码--xml and annotation(带lib包)

    其中BeforeAdvice继承自Adivce接口,这两者都是标签接口,并没有定义任何具体的方法。before方法会在目标对象的指定方法执行之前被执行,在before方法种,你可以取得指定方法的Method实例、参数列表和目标对象,在...

    Spring-MVC技术体系介绍(三)

    中文叫做一次性控制器,也就像一次性筷子那样用完即丢 并不在Spring的Controller继承架构中,而是一个独立的接口定义 当映射的不是一个model 对象时很有用 Bean的作用域必须是prototype ,他们本身不是线程安全的

    Spring3.x企业应用开发实战(完整版) part1

    4.11.1 使用Java类提供Bean定义信息 4.11.2 使用基于Java类的配置信息启动Spring容器 4.12 不同配置方式比较 4.13 小结 第5章 Spring容器高级主题 5.1 Spring容器技术内幕 5.1.1 内部工作机制 5.1.2 BeanDefinition ...

    web bean官方手册(简体中文版+繁体中文版+英文原版)

    Web Bean 甚至提供了必要的整合点来让未来 Java EE 规格或是非标准架构所定义的其它类型组件能够利落地与 Web Bean 整合、有效利用 Web Bean 服务,并与任何其它类型的 Web Bean 进行互动。 Web Bean 受到了几个现有...

    Spring面试题

    Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: ☆...

    ssh(structs,spring,hibernate)框架中的上传下载

     第3~9行定义了一个数据源,其实现类是apache的BasicDataSource,第11~25行定义了Hibernate的会话工厂,会话工厂类用Spring提供的LocalSessionFactoryBean维护,它注入了数据源和资源映射文件,此外还通过一些键值...

    spring3.1中文参考文档

    spring3.1中文参考文档,南磊翻译,现在有4章,目录如下: 第一部分 Spring framework概述............................2.5.3.2 使用组件定义bean的元数据..............................................................

Global site tag (gtag.js) - Google Analytics