spring @Autowired使用详解

1.@Autowired作用

spring的DI(依赖注入)有自动注入和手动注入两种方式,在spring创建bean的使用,如果在bean所对应的实体类当中存在属性,spring就会尝试通过依赖注入的方式给属性赋值,像手动注入的方式有通过构造器注入以及setter方法注入,而@Autowired就是spring自动注入的标识。

2.@Autowired注解分析

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}

通过注解可以看出@Autowired可以标注在方法、构造器、形参、属性以及其他注解上,并且他内置的属性只有一个required,是否必须注入。其默认值为true,如果在默认情况下@Autowired没有匹配到类,会报rg.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.xxx’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
在属性上面加@Autowired不用多说,在方法或者构造器上加,或对其形参进行自动注入,假如有没有匹配到的也会报如上异常

3.@Autowired有多个bean同时进行自动注入

@Autowired默认优先根据类型去匹配
·如果匹配到多个类型则会按照名字匹配
·如果名字没有匹配到或者匹配到多个则会报错:
解决方式:
1.可以去修改属性的名字对应bean的名字,比如直接继承实现类userServiceImpl
2.可以去修改Bean的名字对应属性的名字:@Service(“userService”)
3.可以通过@Qualifier设置属性的名字(覆盖) :@Qualifier(“userServiceImpl”)
4.可以通过@Primary 设置其中一个Bean为主要的自动注入Bean:@Primary
5.使用泛型作为自动注入限定符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值