继承Bean配置
- Spring允许继承bean的配置 ,被继承的bean称为父bean,继承这个父Bean的Bean称为子Bean
- 子Bean从父Bean中继承配置,包括Bean的属性配置
- 子Bean也可以 覆盖 从父Bean继承过来的配置
- 父Bean可以作为配置模版,也可以作为Bean实例, 若只想把父Bean作为模版,可以配置<bean>的abstract属性为true ,这样Spring将不会实例化这个Bean
- 并不是<bean>元素里的所有属性都会被继承 。比如:autowire,abstract等。
- 也 可以忽略父Bean的class属性 ,让子Bean指定自己的类,而共享相同的属性配置,但此时 abstract必须设为true
依赖Bean配置
- Spring允许用户通过depends-on属性设定Bean前置依赖的Bean ,前置依赖的Bean会在本Bean实例化之前创建好
- 如果前置依赖于多个Bean,则可以通过逗号,空格或的方式配置Bean的名称
实例代码详解
package com.spring.auto.wire; public class Department { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Department [name=" + name + "]"; } }
package com.spring.auto.wire; public class Company { private String name; private Department department; public String getName() { return name; } public void setName(String name) { this.name = name; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } @Override public String toString() { return "Company [name=" + name + ", department=" + department + "]"; } }
package com.spring.auto.wire; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main_relation { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml"); Department department = (Department) ctx.getBean("department2"); System.out.println(department); Company company = (Company) ctx.getBean("company"); System.out.println(company); Company company1 = (Company) ctx.getBean("company1"); System.out.println(company1); Company company2 = (Company) ctx.getBean("company2"); System.out.println(company2); } }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: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:bean的abstract属性为true的bean。这样bean不能被IOC容器实例化,只能用来被继承继承 若某一个bean的class属性没有指定,则该bean必须是一个抽象bean--> <bean id="department1" p:name="JKY" abstract="true"></bean> <!-- bean 配置的继承:使用bean 的parent 属性指定继承哪个baen的配置 --> <bean id="department2" class="com.spring.auto.wire.Department" parent="department1"></bean> <bean id="company" class="com.spring.auto.wire.Company" p:name="TT" p:department-ref="department2"></bean> <!-- 要求在配置company1时,必须有一个关联的department2!换句话说company这个bean依赖于department2这个bean. 注: 这里的依赖是指在实例化这个bean之前,必须实例化依赖的bean. 注意与ref的区别 --> <bean id="company1" class="com.spring.auto.wire.Company" p:name="TT1" depends-on="department2" p:department-ref="department2"></bean> <bean id="company2" class="com.spring.auto.wire.Company" p:name="TT1" depends-on="company"></bean> </beans>运行结果:
Department [name=JKY]
Company [name=TT, department=Department [name=JKY]]
Company [name=TT1, department=Department [name=JKY]]
Company [name=TT1, department=null]
注意: depends-on 与 ref的区别,见:
http://stackoverflow.com/questions/12663491/ref-vs-depends-on-attributes-in-spring
相关推荐
- **depends-on属性**:指定Bean的依赖关系,确保某些Bean在其他Bean之前初始化。 #### `<property>`元素 `<property>`元素用于配置Bean的属性。它具有以下属性: - **name属性**:表示要设置的属性名称。 - **...
如果我们有多个Bean具有相似的配置信息,可以通过定义一个父Bean,让子Bean继承其配置。父Bean使用`abstract="true"`标记为抽象,以防止Spring容器尝试实例化它。例如: ```xml <bean id="abstractBook" class=...
在Spring框架中,BeanDefinition是核心组件之一,它定义了bean的基本信息和元数据,包括bean的类、作用域、依赖关系、初始化方法等。在Spring容器启动时,配置文件或注解中的bean定义会被解析成BeanDefinition对象,...
抽象Bean不能单独被实例化,但它们的属性可以被子Bean继承。 二、Bean的依赖关系 依赖关系是指一个Bean需要另一个Bean的服务才能正常工作。Spring支持多种依赖注入(Dependency Injection, DI)方式,包括构造器...
依赖注入是Spring框架的核心特性,它允许我们将对象之间的依赖关系外部化,而不是在对象内部硬编码。这样,我们可以通过配置来管理这些依赖,而不是通过new操作符来创建对象。Spring支持三种依赖注入方式: - **...
在Spring框架中,依赖注入(Dependency Injection,DI)是核心特性之一,它使得对象之间的关系在编译时并不固定,而是在运行时动态地通过容器进行管理。这大大提高了代码的可测试性和可维护性。在Spring 4版本中,...
总的来说,获取非Spring管理组件中的SpringBean主要有两种方式:一是通过实现`ApplicationContextAware`接口并存储ApplicationContext,二是使用注解和静态内部类来注入BeanFactory。这两种方法都是Spring框架提供的...
总之,Spring的Bean继承配置是一种强大的设计模式,它允许我们在多个Bean之间共享和重用配置,同时还能进行定制化。通过XML、源码分析以及合适的工具,我们可以更好地理解和利用这一特性,提高代码的可读性和可维护...
Spring作为一个依赖注入(DI)和面向切面编程(AOP)的容器,它管理Bean的生命周期并处理Bean之间的依赖关系。本文将深入探讨Spring Bean的继承与自动装配。 首先,让我们了解Bean的基本定义。在Spring配置文件中,...
Spring系列第12篇:lazy-init:bean延迟初始化Spring系列第13篇:使用继承简化bean配置(abstract & parent)Spring系列第14篇:lookup-method和replaced-method比较陌生,怎么玩的?Spring系列第15篇:代理详解(Java...
代码及ppt涵盖 Spring4.0 的所有核心内容:在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的...
获取 Spring 里注册的 Bean 对象可以使用四种方法:继承 BaseDispatchAction、实现 BeanFactoryAware、使用 ApplicationContext、使用 @Autowired。每种方法都有其特点和应用场景,开发者可以根据实际情况选择合适的...
6. `parent` 属性:允许一个Bean继承另一个Bean的配置,子Bean将继承父Bean的所有属性,除非被明确覆盖。 7. `autowire` 属性:控制Bean的自动装配。`no`表示不自动装配;`byName`是根据属性名匹配Bean;`byType`是...
当我们通过XML、Java配置或者注解定义Bean时,Spring会将这些配置解析成BeanDefinition对象,BeanDefinition包含了Bean的所有元数据,如类名、依赖关系、初始化方法等。 BeanFactory接口定义了一系列方法,如: 1....
- **`depends-on`属性**:定义Bean之间的依赖关系,确保指定的Bean在当前Bean之前被初始化。 #### 三、`<property>`元素详解 - **功能概述**:`<property>`元素用于设置Bean的属性值,可以是简单的值、对其他Bean...
"Spring Bean 生命周期详解" Spring Bean 生命周期是 Spring 框架中的一个核心概念,了解 Spring Bean 的生命周期对我们了解整个 Spring 框架会有很大的帮助。本文将详细介绍 Spring Bean 生命周期的概念、生命周期...
除了自动扫描,Spring还提供了注解来管理Bean的生命周期和依赖注入。例如: - **@Autowired**:用于自动装配Bean的依赖。Spring会尝试根据类型或名称找到合适的Bean进行注入。 - **@Qualifier**:配合@Autowired...
例如,`@Autowired`注解用于自动装配Bean,Spring通过反射找到合适的依赖并注入。 5. **Aspects and AOP(切面与面向切面编程)**: - Spring的AOP支持允许通过注解定义切面,如`@Aspect`、`@Before`、`@After`等...