【spring】关于@Autowired警告的一点说明

在学习写Service层的实现类时,发现直接在变量上注解 @Autowired 有个警告提示Field injection is not recommended 

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User findAllById(int id) {
        return userMapper.findAllById(id);
    }
}

Field injection is not recommended 
Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".

意思是说“变量依赖注入是不被建议的方式”。它建议“总是采用构造器注入的方式建立依赖注入”。

关于依赖注入一般有三种方式

#1#-> 变量注入(Field Injection)

@Autowired
private UserMapper userMapper;

#2#-> 构造器注入(Constructor Injection)

private UserMapper userMapper;
@Autowired
public UserServiceImpl(UserMapper userMapper) {
    this.userMapper = userMapper;
}

#3#-> setter方法注入 (Setter Injection)

private UserMapper userMapper;
@Autowired
public void setUserMapper(UserMapper userMapper){
    this.userMapper = userMapper;
}

关于三种方式的优缺点,因为刚开始学习暂时没啥感觉,网上有很多资料分析得足够透彻了,先放在这里,以后有新的感悟再更新。

@Autowired的三种使用方式  https://www.cnblogs.com/wang-yaz/p/9340156.html

使用@Autowired注解警告Field injection is not recommended  https://blog.csdn.net/zhangjingao/article/details/81094529

spring为何推荐使用构造器注入  https://www.jianshu.com/p/4694b1a82546

@Autowired的使用:推荐对构造函数进行注释  https://blog.csdn.net/hegongxu/article/details/78114437

结论

Spring3.0官方文档建议使用setter注入覆盖构造器注入。

Spring4.0官方文档建议使用构造器注入。

1-> 如果注入的属性是必选的属性,则通过构造器注入

2-> 如果注入的属性是可选的属性,则通过setter方法注入

3-> 至于field注入,不建议使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值