SpringFramework核心技术一(IOC:命名bean)

简介: 命名Bean每个bean都有一个或多个标识符。这些标识符在托管bean的容器内必须是唯一的。一个bean通常只有一个标识符,但是如果它需要多个标识符,额外的标识符可以被认为是别名。

命名Bean

每个bean都有一个或多个标识符。这些标识符在托管bean的容器内必须是唯一的。一个bean通常只有一个标识符,但是如果它需要多个标识符,额外的标识符可以被认为是别名。


一、如何命名Bean

在基于XML的配置元数据中,可以使用id和/或name属性来指定bean标识符。该id属性允许您指定恰好一个ID。通常,这些名称是字母数字(’myBean’,’fooService’等),但也可能包含特殊字符。
如果要将其他别名引入到bean中,还可以在name 属性中指定它们,并用逗号(,),分号(;)或空格分隔。
作为历史记录,在Spring 3.1之前的版本中,该id属性被定义为一种xsd:ID类型,它限制了可能的字符。
从3.1开始,它被定义为一种xsd:string类型。请注意,Bean id唯一性仍由容器强制执行,尽管不再由XML解析器执行。

您不需要为bean提供名称或标识。如果没有显式提供名称或标识,容器为该bean生成一个唯一名称。
但是,如果您想通过名称来引用该bean,则通过使用ref元素或 服务定位器样式查找,您必须提供一个名称。
不提供名称的目的,与使用内部bean和自动装配协作者有关。

二、给Bean命名的约定

2.1 驼峰命名

约定是在命名bean时使用标准Java约定作为实例字段名称。也就是说,bean名称以小写字母开头,并且从此开始以骆驼为基础。这种名称的例子将是(不带引号)’accountManager’, ‘accountService’,’userDao’,’loginController’,等等。

命名bean始终使您的配置更易于阅读和理解,如果您使用的是Spring AOP,则将建议应用于与名称相关的一组bean时会有很大帮助。

2.2 类路径扫描

通过类路径中的组件扫描,Spring根据以上规则为未命名的组件生成bean名称:本质上,采用简单的类名称并将其初始字符变为小写。然而,在(不寻常的)特殊情况下,当有多个字符并且第一个和第二个字符都是大写字母时,原始外壳将被保留。这些规则与java.beans.Introspector.decapitalizeSpring 定义的规则相同(Spring在此使用的规则)。

三、在Bean定义了名字基础上给Bean取一个别名

3.1 取别名

在bean定义本身中,可以通过使用最多由id属性指定的一个名称和属性中任意数量的其他名称的组合来为bean提供多个名称name。这些名称可以等同于同一个bean的别名,并且对于某些情况很有用,例如允许应用程序中的每个组件通过使用特定于该组件本身的bean名称引用公共依赖项。
然而,指定bean实际定义的所有别名并不总是足够的。有时候需要为别处定义的bean引入别名。在大型系统中,这种情况通常是这样的,其中配置分布在每个子系统中,每个子系统都有自己的一组对象定义。在基于XML的配置元数据中,您可以使用该下面元素来完成此操作。
在这种情况下,被命名的相同容器中的bean 原名字fromName也可以在使用该别名定义之后被称为toName。

<alias name="fromName" alias="toName"/>

3.2举个例子

例如,子系统A的配置元数据可以通过名称引用数据源subsystemA-dataSource。子系统B的配置元数据可以通过名称引用数据源subsystemB-dataSource。在编写使用这两个子系统的主应用程序时,主应用程序通过名称引用数据源myApp-dataSource。要让所有三个名称都引用您添加到MyApp配置元数据中的同一对象,请使用以下别名定义:

<alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
<alias name="subsystemA-dataSource" alias="myApp-dataSource" />

现在,每个组件和主应用程序都可以通过一个唯一的名称来引用dataSource,并保证不会与任何其他定义冲突(有效地创建名称空间),但它们引用同一个bean。
提示:如果您正在使用Java配置,则@Bean注释可用于提供别名。

未完待续~~~

目录
相关文章
|
6月前
|
XML Java 数据格式
编织Spring魔法:解读核心容器中的Beans机制【beans 一】
编织Spring魔法:解读核心容器中的Beans机制【beans 一】
100 0
|
5月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
62 0
|
5月前
|
存储 Java C++
理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory
|
6月前
|
Java Spring
Spring中Bean的五大作用域
Spring中Bean的五大作用域
83 0
|
6月前
|
XML Java 数据格式
探秘Spring Bean的秘境:作用域篇【beans 三】
探秘Spring Bean的秘境:作用域篇【beans 三】
61 0
|
XML Java 测试技术
Spring高手之路8——Spring Bean模块装配的艺术:@Import详解
本文将带你深入探索Spring框架的装配机制,以及它如何使你的代码更具模块化和灵活性。我们首先介绍Spring手动装配的基础知识,然后进一步解析@Import注解在模块装配中的关键角色。文章涵盖从导入普通类、配置类,到使用ImportSelector和ImportBeanDefinitionRegistrar进行动态和选择性装配等多个层次,旨在帮助读者全面理解和掌握Spring的装配技术。
288 0
Spring高手之路8——Spring Bean模块装配的艺术:@Import详解
|
XML Java 数据格式
Spring(Ioc基于xml操作Bean管理)
Spring(Ioc基于xml操作Bean管理)
89 0
|
XML Java 数据格式
Sping5学习(六):IOC操作Bean管理 之 完全注解开发
Sping5学习(六):IOC操作Bean管理 之 完全注解开发
Sping5学习(六):IOC操作Bean管理 之 完全注解开发
|
Java Spring 容器
SpringFramework核心技术一(IOC:ApplicationContext的附加功能)
标题 正如本章介绍中所讨论的,该org.springframework.beans.factory 包提供了用于管理和操作bean的基本功能,包括以编程方式。
1163 0
|
Java Spring
SpringFramework核心技术一(IOC:BeanFactory)
什么是BeanFactory 这BeanFactory为Spring的IoC功能提供了基础,但它只能直接用于与其他第三方框架的集成,现在对于Spring的大多数用户来说,它本质上是历史性的。
1103 0