1 Spring的三种装配机制
a. 在XML中进行显式配置;
b. 在JAVA中进行显式配置;
c. 隐式的bean发现机制和自动装配。
2 自动化装配bean (@Component & @ComponentScan)
两个角度实现自动化装配bean:
a. 组件扫描:Spring会自动发现应用上下文中所创建的bean
b. 自动装配:Spring自动满足bean之间的依赖
// 表明该类会作为组件类,并告知Spring要为这个类创建bean,不需要显示配置这个类
@Component
// 组件扫描默认是不启动的,需要显示的配置Spring,让它去寻找带有@Component注解的类并为其创建bean
// 基于Java配置:启用组件扫描(默认会扫描与配置类相同的包)
@ComponentScan
// 为这个bean设置ID(默认Spring会根据类名为其指定ID)
@ComponentScan(“lonelyHeartsClub”)
// 设置组件扫描的基础包
@ComponentScan(“soundsystem”)
@ComponentScan(basePackages=“soundsystem”)
@ComponentScan(basePackages={“soundsystem”,"video”})
@ComponentScan(basePackageClasses={CDPlayer.class,DVDPlayer.class})
// 通过XML启用组件扫描
<context:component-scan base-package=“sound system” />
// 创建Spring的应用上下文
@RunWith(SpringJUnit4ClassRunner.class)
// @ContextConfiguration 告诉应该在哪里加载配置(如:需要在CDPlayerConfig中加载配置)
@ContextConfiguration(classes=CDPlayerConfig.class)
3 通过 Java 代码装配bean (@Bean)
// @Configuration 表明该类是个配置类,该类应该包含在Spring应用上下文中如何创建bean的细节
@Configuration
// @Bean 会告诉Spring该方法会返回一个对象,该对象要注册为Spring应用上下文中的bean
@Bean
// 通过name 设置beanID
@Bean(name=“lonelyHeartsClub”)
4 通过 xml 装配bean ( & )
// 当Spring 发现<bean>元素时,会调用SgtPeppers的默认构造器来创建bean
// 声明一个简单的bean(bean ID 默认为:soundsystem.SgtPeppers#0,其中#0用于计数)
<bean class=“soundsystem.SgtPeppers”>
// 指定beanID
<bean id=“lonelyHeartsClub” class=“soundsystem.SgtPeppers”>
// 构造器注入 — 装配引用
// spring 遇到 bean 元素时会创建一个CDPlayer实例
// <constructor-arg>元素告诉Spring要将一个ID为compactDisc的bean引用传递到CDPlayer的构造器中
<bean id=“cdPlayer” class=“soundsystem.CDPlayer”>
<constructor-arg ref=“compactDisc” />
</bean>
// 构造器注入 — 装配字面量
<constructor-arg value=“the Beatles” />
// 构造器注入 — 装配集合
<constructor-arg>
<list>
<value>aaaaa</value>
<value>bbbbb</value>
<value>ccccc</value>
</list>
</constructor-arg>
<constructor-arg>
<set>
<ref bean=“aaa” />
<ref bean=“bbb” />
<ref bean=“ccc” />
</set>
</constructor-arg>
5 设置属性 (property)
// <property>为属性的Setter方法所提供的与<constructor-arg>元素为构造器所提供的功能是一样的
// 引用id为 compactDisc 的bean,并将其注入到 compactDisc 属性中,其中name标签为属性名
<bean id=“cdPlayer” class=“soundsystem.CDPlayer”>
<property name=“compactDisc” ref=“compactDisc” />
</bean>