`

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的继承与自动装配。 首先,让我们了解Bean的基本定义。在Spring配置文件中,`&lt;beans&gt;`元素作为根元素,包含了一系列`&lt;bean&gt;`子元素。每个`&lt;bean&gt;`元素定义了一个Bean实例,它由一个唯一的...

    spring bean 属性总结

    Spring的`&lt;beans&gt;`和`&lt;bean&gt;`元素及其属性提供了强大的配置能力,使开发者能够灵活地定义、配置和管理应用程序中的组件。通过深入了解这些元素和属性,开发人员可以更有效地利用Spring框架的功能,构建更加健壮和可...

    Spring In Action 继承Bean的配置

    当我们说“Bean的继承配置”时,实际上是指一个Bean定义可以继承另一个Bean定义的部分或全部属性。 在XML配置中,我们可以使用`&lt;bean&gt;`标签的`parent`属性来指定父Bean。例如: ```xml &lt;bean id="parentBean" ...

    Spring Key tutorial PDF

    #### Spring Bean 定义继承 Bean 定义也可以支持继承,子 bean 可以继承父 bean 的属性。 - **示例**:创建两个 bean 定义,其中一个继承另一个,并覆盖某些属性。 #### Spring 依赖注入 Spring 支持多种依赖...

    示例代码:spring使用【XXXPostProcessor】添加bean定义,修改bean定义、代理bean

    1. **添加Bean定义**:在Spring容器中,我们可以通过`BeanDefinitionRegistry` 接口动态地注册新的bean定义。首先创建`BeanDefinition`对象,然后在`postProcessBeforeInitialization` 或 `...

    Java的Spring框架中bean的继承与内部bean的注入

    Bean的继承是指在Spring容器中,一个子Bean定义可以从一个父Bean定义中继承配置信息。这并不意味着Java类的继承关系,而是针对配置元数据的一种抽象。通过继承,子Bean可以在保留父Bean某些配置的同时,对某些属性...

    获得spring里注册Bean的四种方法

    获取 Spring 里注册的 Bean 对象可以使用四种方法:继承 BaseDispatchAction、实现 BeanFactoryAware、使用 ApplicationContext、使用 @Autowired。每种方法都有其特点和应用场景,开发者可以根据实际情况选择合适的...

    SSH笔记-依赖、继承bean的配置

    在Spring中,一个bean可以基于另一个bean定义,这意味着它将继承父bean的所有属性和配置,包括默认的初始化方法、销毁方法、属性值等。这样,我们可以在父bean中定义通用的配置,而在子bean中只定义特有的部分,避免...

    spring自动扫描和管理Bean的示例

    - **@Scope**:定义Bean的作用域,如单例(singleton)、原型(prototype)等。 - **@PostConstruct** 和 **@PreDestroy**:标记初始化和销毁方法,Spring会在Bean创建后和销毁前调用这些方法。 在`spring_autozp_...

    Spring的Bean配置说明

    - **功能概述**:`&lt;beans&gt;`是Spring配置文件的根元素,用来包含一个或多个`&lt;bean&gt;`元素,用于定义Spring容器管理的各种Bean。 #### 二、`&lt;bean&gt;`元素详解 - **基础配置**: - **`class`属性**:表示JavaBean的全...

    spring的Bean配置说明

    1. `&lt;beans&gt;` 根元素:这是Spring配置文件的起点,它包含了所有的Bean定义。Spring容器会解析这个文件并创建相应的Bean实例。 2. `&lt;bean&gt;` 元素:这是Spring配置中最常见的元素,它定义了一个特定的Java对象,即...

    Quartz注入Spring的Bean

    2. **Spring管理Job的生命周期**:将Job类定义为Spring的Bean,这样Job实例的创建、初始化、销毁等生命周期管理就交给了Spring,而不是Quartz。这样做的好处是,Job可以轻松地利用Spring的其他服务,如数据库连接池...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    除了基本的`@Component`家族,Spring还提供了一些高级注解,如`@Scope`用于定义Bean的作用域,`@Lazy`用于延迟初始化Bean,`@Qualifier`用于在多个相同类型的Bean中指定特定的一个。 ### **总结** Spring的自动...

    第七章 Spring4 继承、依赖、引用

    在Spring中,我们可以定义Bean的继承关系,使得子类Bean可以继承父类Bean的配置属性。这在处理具有相似属性或行为的Bean时非常有用。例如,你可以定义一个基础的DAO Bean配置,然后让具体的DAO Bean继承它,从而...

    Spring中眼花缭乱的BeanDefinition.docx

    - ChildBeanDefinition则用于表示从父BeanDefinition派生出来的Bean定义,它会继承父定义并可以覆盖或添加额外的属性。 此外,BeanDefinition还涉及到的类和接口有: - AttributeAccessor接口,允许在任意对象上...

    Spring实战之抽象Bean和子Bean定义与用法示例

    Spring实战之抽象Bean和子Bean定义与用法示例 在Spring框架中,抽象Bean和子Bean是两个非常重要的概念,它们在Bean的定义和使用中扮演着关键角色。抽象Bean是指不能被实例化的Bean,而子Bean则是继承了抽象Bean的...

    通过实例解析spring bean之间的关系

    此外,Spring还允许定义抽象Bean(abstract bean),它们不用于实例化,而是作为其他Bean的模板。一个Bean可以通过设置`abstract`属性为`true`来声明为抽象Bean,或者如果未指定`class`属性,Spring也会将其视为抽象...

    Spring源码学习二:BeanDefinition解析1

    在Spring容器启动时,配置文件或注解中的bean定义会被解析成BeanDefinition对象,然后由容器进行管理。本文将深入探讨BeanDefinition的内部结构和主要属性。 首先,BeanDefinition接口继承了AttributeAccessor和...

    使用监听器对Spring bean id进行唯一校验过程解析

    首先,Spring IOC容器在加载时并不会显示对不同配置文件中重复的bean id进行报错提示,当遇到有重复的bean定义时,Spring采取的策略是把后面加载的配置覆盖前面加载的配置,没有任何警告和提示。这使得我们在团队...

Global site tag (gtag.js) - Google Analytics