SpringBoot注解-注入对象

Autowired

  默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class)

  如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找applicationContext.getBean("bookDao") @Qualifier("bookDao")

  问题

    对象的外部可见性

    可能导致循环依赖

    无法设置注入的对象为final,也无法注入静态变量

    单实例组件依赖多实例组件,无法单例

@Qualifier 精确指定

在自动按照类型注入的基础之上,再按照 Bean  id 注入。它在给字段注入时不能独立使用,必须和@Autowire一起使用;但是给方法参数注入时,可以独立使用

构造器的注入

通过构造器的方式将Bean注入到字段中

构造器注入能够保证注入的组件不可变,并且确保需要的依赖不为空

这样就可以将变量设置为final,并且传递的肯定是一个对象,避免出现空指针异常

若是出现字段注入中循环依赖的问题,在项目启动时会非常形象的将错误跑出来

private final ResultUtils resultUtils;

@Autowired

public CommonResponseDataAdvice(final ResultUtils resultUtils) {

    this.resultUtils = resultUtils;

}

另一种写法

@Component
@RequiredArgsConstructor
public class AccessFilter implements Filter {
   private final RestTemplate restTemplate;
}

Setter的依赖注入

@Component
public class SetterBasedInjection {
    private InjectedBean injectedBean;
    // 可以去掉
    @Autowired
    public void setInjectedBean(InjectedBean injectedBean) {
        this.injectedBean = injectedBean;
 }

@Resource

默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。

public class LaController {
    //按类型注入
    @Resource(type=LaService.class)
    private LaService  laService;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值