第三章 最小化Spring xml配置
自动装配(autowiring)
自动检测(autodiscovery)
自动装配
byName、byType、constructor
autodetect(首先constructor,然后byType)
<bean id=..... autowire="constructor"/> <bean id=.... primary="true"/> <!-- 首选项bean-->
<bean id=.... autowire-candidate="false"/> <!-- 不作为候选bean进行装配-->
默认自动装配 (default-autowire默认为none,不进行自动装配)
<beans xmlns=...................
.......................
default-autowire="byType"> ...........
</beans>
使用注解装配
Spring默认禁用注解装配,需在context命名空间配置如下:
<context:annotation-config/>
①: 自带的@Autowired 属性 方法 构造器(required=false)
②: @Injects 没有required属性,注解依赖关系必须存着
③: @Resource
@Qualifier 与 @autowired配合使用,指定特定id的bean,可以理解为将autowired的默认byType更改为byName。
qualifier也可以修饰bean,进行归类管理。
@Qualifier("stringed")
public class Guitar implements Instrument {
....
} @Qualifier("stringed")
public class Violin implements Instrument {
....
} ****************************************** 当使用自动注入的时候
@Autowired
@Qualifier("stringed")
private Instrument instruments;
创建自定义的限定器(Qualifier)
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import org.springframework.beans.factory.annotation.Qualifier; @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface StringedInstrument { }
@Inject 对应@Named,类似@Autowired对应@Qualifier.