Spring in Action --- 第二章 装配Bean

时间:2023-03-09 07:18:12
Spring in Action --- 第二章  装配Bean

Spirng配置的可选方案

  • 在XML中进行显示配置
  • 在Java中进行显示配置
  • 隐式的bean发现机制和自动装配

bean装配

1. 在希望被扫描到的类上加注解 @Component

2. 基于不同的配置方案选择不同的方式配置

方式 方法
基于Java的配置 1. 定义一个Java类,使用注解@Configuration将其定义为一个配置类
2.再加入注解@ComponentScan,如果没有其他配置的话,默认会扫描与配置类相同的包
基于XML的隐式配置 在XML中加入 <context:compoent-scan base-package="" /> 其中base-package指定扫描的范围
基于XML的显示配置 在XML中加入 <bean id="" class=""/> 即可

3.为组件扫描的bean命名

如果bean不是通过XML显示的给定ID,Spring会根据类名为其指定一个ID,规则是将雷鸣的第一个字母变为小写

4.默认情况下,Spring中的bean都是单例的

当不同的方法调用相同的类实例时, Spring会拦截对其的调用并确保返回的是Spring创建的实例

5.使用XML配置bean

使用XML配置bean的时候,如果没有显示的给定一个ID,bean将会根据全限定类名进行命名,并且后面会跟上#和数字.例如 <bean class="example.test" /> ,它的ID为 example.test#0,如果有另一个class相同的bean,会被命名为example.test#1

6.使用XML注入初始化bean

  • 构造器注入

    假设我们已经初始化了个bean, id为test, 使用以下方式注入到你希望初始化的地方
<bean id="..." class="...">
<constructor-arg ref="test" />
</bean>

如果在 constructor-arg 中使用value="",则表示注入常量

  • 属性注入

    假设我们已经初始化了个bean, id为test, 使用以下方式注入到你希望初始化的地方
<bean id="..." class="...">
<property name="..." ref="test" />
</bean>

name表明你希望被注入的属性名称

如果在 property 中使用value="",则表示注入常量


注解使用

@Compont

  • @Compont("...") 为bean定义一个ID

@CompontScan

  • @CompontScan("...") 或 @CompontScan(basePackages = "...") 设置基础包,允许设置多个基础包,设置为数组即可(@CompontScan(basePackages = "{...}"))
  • @CompontScan(basePackageClasses = {*.class, *.class}) 使用类来设置基础包,这些类所在的包将会作为组件扫描的基础包

@Autowired

实现自动装配,可以用在属性,构造器,任何方法上,但是我们常用的方式是放在属性上

如果有些bean不是必须的,可以讲required属性设置为false

@Import

@Import(*.class) 将多个配置项组装在一起,请注意,这里也可以使用数组

@ImportResource

引入XML配置文件


Spring的 c- 命名空间和 p- 命名空间

不常用,详情请翻到书本 P53和 P57