`

Spring的继承

阅读更多
parent-init.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans default-autowire="byName"> 

  <bean id="initBean" class="org.frame.auth.init.InitBean"  >
  	 	<property name="name">
  	 		<value>parent</value>
  	 	</property>
  </bean>
  </beans>

spring-init.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans default-autowire="byName"> 

  <bean id="initBean" class="org.frame.auth.init.InitBean"   >
  	 	<property name="name">
  	 		<value>sub</value>
  	 	</property>
  </bean>
</beans>

TestParent.xml
package org.frame.auth.init;


import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class TestParent {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//文档果然犀利啊.
		Resource resource = new ClassPathResource("parent-init.xml");
		BeanFactory xmf = new XmlBeanFactory(resource);
		Resource subResource = new ClassPathResource("spring-init.xml");
		BeanFactory subXmf = new XmlBeanFactory(subResource,xmf);
		InitBean initBean = (InitBean) subXmf.getBean("initBean");
		System.out.println(initBean.getName());//得到的是父.

		ApplicationContext ctx = new ClassPathXmlApplicationContext("parent-init.xml");

		ApplicationContext subctx = new ClassPathXmlApplicationContext(new String[]{"spring-init.xml"},ctx);
		InitBean initBeanb = (InitBean) subctx.getBean("initBean");
		System.out.println(initBeanb.getName());//得到的是子.
	}

}


这里展示了Spring 的BeanFactory的加载,有趣的是XmlBeanFactory加载是父容器类覆盖子容器类,而ApplicationContext加载是是子容器类覆盖父容器类,这个大家要注意的。
下面展示Spring Bean的parent属性。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " http://www.springframework.org/dtd/spring-beans.dtd ">
<beans default-autowire="byName">

	<bean id="parent" class="org.frame.base.parent.Message" abstract="true" >
		<property name="name">
			<value>ycl</value>
		</property>
		<property name="message">
			<value>yes</value>
		</property>
	</bean>

	<bean id="person" class="org.frame.base.parent.Person" parent="parent">
		<property name="name">
			<value>天才</value>
		</property>
	</bean>


</beans>

Person
package org.frame.base.parent;

public class Person {

	private String name;
	private String message;
	public void setName(String name) {
		this.name = name;
	}
	public void setMessage(String message) {
		this.message = message;
	}

	public String toString(){
		return name+":"+message;
	}

}

Message
package org.frame.base.parent;

public abstract class Message {

	private String name;
	private String message;
	public void setName(String name) {
		this.name = name;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public String toString(){
		return name+":"+message;
	}

}


测试
package org.frame.base.parent;

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

public class TestParent {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ctx = new ClassPathXmlApplicationContext("parent.xml");
		Person pp =(Person)ctx.getBean("person");
		System.out.println(pp);
	}

}


这里的Message和Person完全没有关系,但是我在Spring Bean中指定了其父Bean,可见Spring的这个parent是属性的继承。大家可以定义属性,然后采用重定义覆写.
分享到:
评论
2 楼 a123159521 2011-04-02  
Technoboy 写道
呵呵,没看懂啊

执行一下代码就明白了
1 楼 Technoboy 2011-03-23  
呵呵,没看懂啊

相关推荐

    spring继承quartz2.2.1步骤

    spring集成quartz2.2.1步骤,包括具体代码,欢迎下载

    struts1+spring+hibernate整合的jar包

    Struts1、Spring和Hibernate是Java Web开发中的三个重要框架,它们各自负责应用程序的不同层面:Struts1主要用于表现层管理,Spring则是一个全面的后端框架,包括依赖注入、事务管理、AOP(面向切面编程)等,而...

    SpringBoot集成Spring Security实现角色继承【完整源码+数据库】

    在本文中,我们将深入探讨如何在SpringBoot项目中集成Spring Security来实现角色继承,并提供一个完整的源码示例。这将特别适用于初学者和开发者,帮助他们更好地理解Spring Security的安全特性。 首先,让我们理解...

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

    在Spring框架中,继承、依赖和引用是核心的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)概念的重要组成部分。这些概念对于理解和使用Spring框架进行应用开发至关重要。以下是对...

    继承 空指针 spring

    当我们谈论"继承 空指针 spring"时,这通常涉及到Spring框架中的类继承和空指针异常(NullPointerException)问题。 首先,让我们讨论一下继承在Spring框架中的作用。在Spring中,我们经常通过继承来实现对服务层...

    Spring In Action 继承Bean的配置

    在Spring框架中,Bean的继承配置是一个非常关键的概念,它允许我们通过定义一个基础Bean配置,然后由其他Bean继承这个配置,实现配置的复用和扩展。这种方式在大型项目中非常常见,因为它使得代码更加模块化,易于...

    常用四大连接池集合

    常用四大连接池集合c3p0,dbcp,druid,HikariCP,内有四大连接池的使用方法,配置方法,以及它们之间的比较和介绍,和spring继承等配置方法。 c3p0 太古老,代码及其复杂,不利于维护。貌似都比它强。 dbcp 是 ...

    Spring 简介 Spring 简介

    与其他容器相比,Spring 的一大特点是其Bean可以是普通的Plain Old Java Objects(POJOs),不需要实现特定接口或继承特定基类,这意味着Spring管理的对象在容器外部也可以正常使用,增强了代码的可复用性和灵活性。...

    spring boot继承mybatis框架以及多数据源

    Spring Boot 是一个基于 Spring 框架的高度集成了简化开发的工具,它旨在简化创建产品级的 Spring 应用程序。MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。当我们将 Spring Boot 与 ...

    spring-cloud 集成 flowable 工作流

    本教程将深入探讨如何在基于Spring Cloud的微服务架构中集成Flowable工作流引擎,提升系统的流程管理能力。 首先,Spring Cloud是构建分布式系统的一系列工具集,包括服务发现、配置管理、熔断机制等,它为微服务...

    SpringCloud.pdf

    应用程序上下文层次结构允许子上下文从父上下文中继承属性,增强了配置管理的灵活性。 总之,Spring Cloud 是构建云原生应用的强大工具,它提供了丰富的功能,如配置管理、服务发现、断路器、路由等,帮助开发者...

    Spring boot,springCloud精选视频教程

    17.Spring Cloud中Feign的继承特性 18.Spring Cloud中Feign配置详解 19.Spring Cloud中的API网关服务Zuul 20.Spring Cloud Zuul中路由配置细节 21.Spring Cloud Zuul中异常处理细节 22.分布式配置中心Spring ...

    SpringBoot+SpringCloud面试题.doc

    - 通过继承`spring-boot-starter-parent`父项目,可以获得统一的版本管理和依赖管理。 - 导入`spring-boot-dependencies`作为依赖管理,简化项目构建配置。 7. **Spring Boot运行方式** - 打包成JAR/WAR运行,可...

    009 maven插件spring-boot-maven-plugin

    如果不想继承 Starter 父 POM,可以使用以下方式来使用 Spring Boot: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-web ``` 自定义层配置 Spring Boot Maven Plugin 提供...

    Spring Boot整合SpringDataJPA

    我们可以通过继承`JpaRepository`或`CrudRepository`来创建自定义的Repository,无需编写任何DAO层的代码。例如,假设我们有一个`User`实体,我们可以定义一个`UserRepository`: ```java public interface ...

    demo-Maven-Webapp.rar_DEMO

    **描述解析:** 描述提到“maven构建的spring继承CXF的简单示例”,这告诉我们这个项目是用Maven来管理依赖,使用Spring框架,并且集成了CXF服务框架。对于新手来说,这是一个很好的起点,因为它覆盖了三个关键的...

    【完整源码+数据库】 SpringBoot集成Spring Security实现角色继承

    在本文中,我们将深入探讨如何在SpringBoot项目中集成Spring Security来实现角色继承,并提供一个完整的源码示例。这将特别适用于初学者和开发者,帮助他们更好地理解Spring Security的安全特性。 让我们理解Spring...

    Spring Security角色继承分析

    Spring Security 角色继承分析 Spring Security 角色继承分析是 Spring Security 框架中的一项重要功能,它允许开发者定义角色之间的继承关系,从而实现权限的继承和复用。今天,我们将深入探讨 Spring Security ...

    spring试题(含答案)

    setter 注入的优点包括通过 setter 方法设定依赖关系更加直观自然、当依赖关系(或继承关系)较复杂时,构造注入方式的构造函数相当庞大,此时若使用设值注入方式则简单快捷。构造方法注入的优点包括把创建完整、...

    学习Spring教程时,无法继承SpringBeanAutowiringSupport类

    当你在项目中尝试继承`SpringBeanAutowiringSupport` 时遇到编译错误,这通常意味着你的构建路径中没有包含Spring的核心库。Spring框架是基于多个jar包的,包括但不限于`spring-context.jar`,这个jar包包含了`...

Global site tag (gtag.js) - Google Analytics