Spring 配置使用 - 装配 Bean

Bean 声明配置

Spring 利用 Ioc 容器管理 Bean,前提是 Bean 需要在配置文件声明(定义)。

声明一个 Bean 需要的基本元素如下:

元素 作用
class 全限定类名,即 Bean 的完整包名,是必不可少的元素。
id 标识,在整个 Ioc 容器中必须唯一,用来区分不同的 Bean。若 Bean 未指定 id,则 Ioc 容器会为其自动生成一个标识;只能配置一个。
name 标识符或名称, 作用与别名一致;在整个 Ioc 容器汇总必须唯一,但是可以配置多个。
alias 别名,在整个 Ioc 容器汇总必须唯一,但是可以配置多个。

声明一个 Bean 的配置如下:

<!-- 1.只配置必须的全限定类名(class),由Ioc 容器为其生成一个标识 -->
<bean class="com.demo.Animals"/>

<!-- 2.指定 id,该标识在 Ioc 容器中必须唯一 -->
<bean id="animals" class="com.demo.Animals"/>

<!-- 3.指定 name,该标识在 Ioc 容器中必须唯一,同一个 Bean 中 name 可以相同 -->
<!--   可配置一个或多个,第一个会被当作标识,其余的被当作别名 -->
<bean name="animals,Animals" class="com.demo.Animals"/>

<!-- 4.同时指定 id 和 name -->
<bean id="animals" name="animals" class="com.demo.Animals"/>

<!-- 5.同时指定 id 和 alias -->
<!--   alias 在 Bean 中不能单独存在,必须指定 id 或 name -->
<!--   alias 可配置一个或多个,标识在整个 Ioc 容器唯一,在 Bean 中可以 相同 -->
<!--   alias 元素的 name 表示 Bean 的 id 或 name -->
<bean id="animals"  class="com.demo.Animals"/>
<alias name="animals" alias="a"/>
<alias name="animals" alias="b"/>

<!-- 6.同时指定 name 和 alias -->
<bean name="animals"  class="com.demo.Animals"/>
<alias name="animals" alias="a"/>
<alias name="animals" alias="a"/>

注意事项:

  • id 在同一个 Bean 中只能指定一个,name 和 alias 可以指定多个

  • 同时存在 id 和 name 时,id 作为标识,name 会被当作别名

  • 存在多个 name 时,第一个 name 会被当作 标识,其余的 name 会被当作别名;

  • 多个 name 或 alias 之间可以用分号(;)、空格、逗号(,)隔开。


Bean 调用方式

在 Spring Ioc 容器声明了 Bean 之后,就表示将 Bean 交给 Spring 去管理,由 Spring 负责 Bean 的整个生命周期,包括 Bean 的创建、销毁等等。

这就是所谓的控制反转(Ioc),将 Bean 的控制权交给 Spring,我们无需常见它,只需调用它即可。

通过 Spring Ioc 容器调用 Bean 的方式有三种:根据类型、根据名称、根据名称+类型。

注意事项:

  • 若 Ioc 容器中存在多个同一类型的 Bean 时,根据类型取得 Bean 时会抛出 NoUniqueBeanDefinitionException 异常

  • 若找不到指定名称或类型的 Bean时,会抛出 NoSuchBeanDefinitionException 异常

// 配置文件路径
String path = "/WebRoot/WEB-INF/spring-bean.xml";

// 取得 Spring 的 Ioc 容器(也称应用上下文)
ApplicationContext context = new FileSystemXmlApplicationContext(path);

// 由 Ioc 容器获取定义的 Bean:

// ①根据 Bean 的类型(容器存在多个相同类型 Bean,抛出异常)
Animals animal = (Animals) context.getBean(Animals.class);

// ②根据 Bean 的名称Animals animal = (Animals) context.getBean("animals");

// ③根据 Bean 的类型和名称
Animals animal = (Animals) context.getBean("Animals",Animals.class);

观察上面的代码,发现

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oxf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值