四、 Bean属性介绍

Spring IoC 容易管理一个或者多个 bean。 bean 由应用到到容器的配置元数据创建,例如,在 XML 中定义 的形式。容器内部,这些 bean 定义表示为 BeanDefinition 对象,其中包含(其他信息)以下元数据:

  1. 限定包类名称:典型的实际实现是定义 bean 的类。
  2. bean 行为配置元素,定义了容器中的Bean应该如何行为(范围、生命周期回调,等等)。
  3. bean 需要引用其他 bean 来完成工作,这些引用也称为合作者或依赖关系。
  4. 其他配置设置来设置新创建的对象,例如,连接使用 bean 的数量管理连接池,或者池的大小限制。

以下是每个 bean 定义的属性

属性解释
classSection 6.3.2, “Instantiating beans”
nameSection 6.3.1, “Naming beans”
scopeSection 6.5, “Bean scopes”
constructorarguments Section 6.4.1, “Dependency Injection”
propertiesSection 6.4.1, “Dependency Injection”
autowiring modeSection 6.4.5, “Autowiring collaborators”
lazy-initialization modeSection 6.4.4, “Lazy-initialized beans”
initialization methodthe section called “Initialization callbacks”
destruction methodthe section called “Destruction callbacks”

除了包含的信息里面 bean 定义的如何创建一个特定的bean, ApplicationContext 的实现还允许由用户注册现有创建在容器之外的现有对象。这是通过访问 ApplicationContext 的 BeanFactory 的 getBeanFactory() 方法 返回 BeanFactory 的实现DefaultListableBeanFactory 。DefaultListableBeanFactory 支持这种通过 registerSingleton(..) 和registerBeanDefinition(..)方法来注册。然而,典型的应用程序只能通过元数据定义的 bean 来定义。

命名bean

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

在基于XML的配置元数据,可以使用id和/或name属性来指定bean标识符(或多个)。该id属性允许你指定只有一个ID。通常这些名称是字母数字(’myBean’,’fooService’等),但也可能包含特殊字符。如果你想引入其他别名豆,你还可以指定它们的name 属性,用逗号分隔(,),分号(;),或空白。作为历史记,在现有春3.1版本中,id属性被定义为xsd:ID类型,其限制可能的字符。作为3.1,它定义为一个xsd:string类型。需要注意的是豆id唯一仍然由容器执行,但不再通过XML解析器。

您不需要为bean提供名称或ID。如果没有明确提供名称或ID,容器将为该bean生成唯一的名称。

约定是在命名bean时使用标准Java约定来实例字段名称。也就是说,bean名称以小写字母开头,并从那时起就开始绘制。这种名称的例子将是(不带引号)’accountManager’, ‘accountService’,’userDao’,’loginController’,等等。

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

bean 的别名

在对 bean 定义时,除了使用 id 属性指定一个唯一的名称外,为了提供多个名称,需要通过 name 属性加以指定,所有这个名称都指向同一个bean,在某些情况下提供别名非常有用,比如为了让应用每一个组件都能更容易的对公共组件进行引用。然而,在定义 bean 时就指定所有的别名并不总是很恰当。有时我们期望能够在当前位置为那些在别处定义的bean引入别名。在XML配置文件中,可以通过 元素来完成 bean 别名的定义.

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

在这种情况下,如果容易中存在名为 fromName 的 bean 定义,在增加别名定义后,也可以用 toName 来引用。

例如,在子系统 A 中通过名字 subsystemA-dataSource 配置的数据源。在子系统B中可能通过名字 subsystemB-dataSource来引用。当两个子系统构成主应用的时候,主应用可能通过名字 myApp-dataSource 引用数据源,将全部三个名字引用同一个对象,你可以将下面的别名定义添加到应用配置中:

<alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
<alias name="subsystemA-dataSource" alias="myApp-dataSource" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值