内容预览:
- Bean的自动装配
- Bean的自动检测
- 面向注解的Bean装配
- 基于java的spring配置
一.首先要了解什么是spring装配?
创建应用组件之间相互协作关系的行为就是装配
spring中提供了几种技巧帮助我们来减少XML的配置数量
- 自动装配:有助于减少甚至消除配置
<property>
和<constructor-arg>
元素,让spring自动识别如何装配Bean的依赖关系- 自动检测:比自动装配更进了一步,让spring自动识别哪些类需要被配置成spring Bean,从而减少对
<bean>
元素的使用
当自动装配和自动检测一起使用时,可以显著的减少spring中XML的配置数量
二.自动装配Bean属性
1.- 4中类型的自动装配,如下图所示:
byName自动装配:
byType自动装配:spring会寻找哪一个bean的类型与属性的类型相匹配:
constructor自动装配:
最佳自动装配:如果想自动装配,但是又不能确定使用哪一种自动装配的时候,我们可以设置autowire属性值为autodetect,由spring来决定使用哪一种类型的自动装配
当配置一个bean的autowire属性值为autodetect的时候,spring将首先尝试使用constructor自动装配,如果没有发现与构造器相匹配的bean,spring将尝试使用byType自动装配
2.默认自动装配:如果要为spring应用上下文中的所有Bean配置相同的autowire属性值得时候就适合这种方式
3.混合使用自动装配和显示装配:如果在spring上下文中有多个Bean实现了某一接口,为了避免spring无法从这几个实现了相同的接口的Bean中进行明确挑选而抛出异常,我们就可以此采用显示装配某一属性来覆盖自动装配
三.使用注解装配
spring容器默认禁用注解配置,所以在使用基于注解的自动装配前,我们要在spring中启用它,最简单的启用方式就是使用spring的context命名空间中配置的
<context:annotation-config>
元素,如下图所示:
spring3 支持几种不同的用于自动装配的注解:
1.使用@Autowired:适用于应用中 必须只能有一个Bean适合装配到@Autowired注解多标注的属性或参数中,如果没有匹配的Bean或者有多个匹配的Bean则需要另外的解决办法
1.1可选的自动装配->没有匹配的Bean:
1.2限定歧义性的依赖->有多个匹配的Bean:为了帮助@Autowired鉴定出哪一个才是需要的Bean,我们需要配合使用spring的@Qualifier注解:
2.借助@Inject实现基于标准的自动装配
2.1限定@Inject所标注的属性:
3.在注解注入中使用表达式
四.自动检测Bean
为了配置spring的自动检测,需要配置
<context:component-scan>
元素,它完成了与<context:annotation-config>
一样的工作,还允许spring自动检测Bean和定义Bean,这意味着不用bean元素,spring应用中大多数的Bean都可以实现定义和装配,配置方式如下图所示:
1.为自动检测标注Bean
spring在扫描包的时候发现了使用@Component等注解所标注的类时就会将它注册为spring Bean,Bean 的ID为类名首字母小写;如果制定了一个Bean ID作为@Component(“eddie”)的参数,则Bean的ID就不能使用默认的了,需采用制定的ID名
2.过滤组件扫描
2.1:
五.使用spring基于java的配置
1.创建基于java的配置:spring的java配置可以让我们不使用XML就可以编写大多数的spring配置,但我们仍然需要极少量的XML来启用java配置
:
2.定义一个配置类:
3.声明一个简单的Bean:
4.使用spring的基于java的配置进行注入