命名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注释可用于提供别名。

未完待续~~~

SpringFramework核心技术一(IOC:命名bean)相关推荐

  1. SpringFramework核心技术一(IOC:自定义一个bean的本质)

    自定义一个bean的本质 本篇讨论如何自定义一个Bean和这个Bean的本质. 一.生命周期回调简介 要与bean生命周期的容器管理进行交互,可以实现Spring InitializingBean和D ...

  2. Spring核心技术之IOC容器(一):IOC容器与Bean简介

    最近开始研究Spring框架,今天学习Spring的核心内容IOC 与 Bean 1. Spring IOC 与 Bean 简介  Inversion of Control (IoC)即控制反转,也叫 ...

  3. 4、IOC 之Bean的依赖关系

    4.IOC 之Bean的依赖关系 4.1.依赖注入(DI) 依赖关系注入 (DI) 是一个过程,其中对象仅通过构造函数参数.工厂方法的参数或在对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义 ...

  4. SpringFramework概述及IOC

    一:Spring概述.Spring体系介绍 Spring的核心是控制反转(IoC)和面向切面(AOP) spring是开源的.轻量级的.一站式的框架,以 IoC(Inverse Of Control: ...

  5. SpringBoot用容器IoC管理Bean

    认识IoC容器和Servlet容器 认识容器 1.IoC容器 IoC(Invension of Control) 容器,是面向对象编程中的一种设计原则,意思是控制反转.它将程序中创建对象的控制权交给S ...

  6. IOC操作Bean管理注解方式(完全注解开发)

    IOC操作Bean管理注解方式(完全注解开发) (1)创建配置类,替代xml配置文件 需要让Spring 把一个普通的类认为是配置类 结构图: SpringConfig类代码如下: package c ...

  7. IOC操作Bean管理注解方式(注入属性@Autowired和Qualifier)

    目录 IOC操作Bean管理注解方式(注入属性@Autowired.@Qualifier和@Resource) 1.基于注解方式实现 属性注入 (1)@Autowired:根据属性类型进行自动装配 第 ...

  8. IOC操作Bean管理注解方式(组件扫描配置)

    IOC操作Bean管理注解方式(组件扫描配置) 开启组件扫描的 细节配置 约定那些类可以扫描,哪些类不可以扫描 bean1.xml配置如下: <?xml version="1.0&qu ...

  9. IOC操作Bean管理注解方式(创建对象)

    目录 IOC操作Bean管理注解方式(创建对象) 1.什么是注解 2.Spring 针对 Bean 管理中创建对象提供注解主要有以下四种 (1)@Component (2)@Service (3)@C ...

最新文章

  1. 0x53. 动态规划 - 区间DP(习题详解 × 8)
  2. 随机森林案例分析:德国银行信贷风险分析
  3. 找不到或无法加载主类
  4. Spring 初识Aop JDK动态代理实现 原理初显
  5. hashmap时间和空间复杂度_Python算法 00--时间复杂度和空间复杂度
  6. arm B和BL指令浅析
  7. 【狂转】某个N人的访谈记录
  8. 暑期训练日志----2018.7.30
  9. linux7.0安装oracle乱码,Oracle Linux 7设置中文字符集
  10. 在docker容器中安装ifconfig、ping等工具
  11. 最大流(Maximum Flow)
  12. 自动驾驶横向控制 LQR 算法推导及仿真学习笔记
  13. 火车票能不能选座_终于,买火车票也能选座了!
  14. npm ERR path /Users/user/Desktop/app/node_modules/node-sass
  15. 表格的下拉放大 ----------王朋
  16. 读书:《人人都是产品经理》-苏杰
  17. 用js创建audio对象实现网页迷你音乐播放器
  18. Oracle中的NVL()函数的用法
  19. matlab曲线导入cad,MATLAB导入CAD数据.docx
  20. 操作系统中文件系统-文件的分类

热门文章

  1. 快速集成iOS基于RTMP的视频推流
  2. Java学习笔记-1.简介
  3. MySql中的内外联结查询
  4. UVA 620 - Cellular Structure
  5. SQL基础实例(学生课程系统)
  6. 有用的正则表达式或JS方法
  7. 性能测试之Jmeter 中 CSV 如何参数化测试数据并实现自动断言
  8. python类中包含一个特殊的变量、它可以访问类的成员_Python 类的特殊成员介绍...
  9. LOL服务器维护打排位算吗,LOL:请停止你的排位行为,这是连败前的征兆!再玩就会一直掉分...
  10. 实现第一个JDBC程序(详细)