spring提示Field injection is not recommended和依赖注入的方式

spring最大的特点就是控制反转,以前我们使用另一个类的方法时,总是需要先new一个类的实例,这样既占用内存也不方便管理,spring就提出bean容器的概念,把所有需要用到的实例都统一交给bean管理,当需要一个类的实例时,由spring注入。

1.问题来源

在使用@Autowired方法注入的时候提示Field injection is not recommended,截图如下在这里插入图片描述
字面意思就是使用这种变量的依赖注入不被推荐

2.常用的几种注入方式

2.1自动装配

这是我们最常用的注入方式,因为其使用起来非常简单,只需加上@Autowired注解即可。
代码:

@Autowired
   private BestPayService bestPayService;

这是我们最喜欢用的方式,只有两行代码,非常简单。为什么spring不推荐这样的方式呢,因为这种方式过于依赖注入容器,当没有启动整个依赖容器的时候,这个类有可能没有被spring托管,在反射的时候没有办法提供这个类的依赖。影响整体的项目运行。但我们在做项目时,大概率都是在项目启动的时候就把所有的类交给bean容器了。

2.2Set方法注入

代码:


public class SpringAction {  
        //创建成员变量 
    private SpringDao springDao;  
        //一定要写被注入对象的set方法  
    public void setSpringDao(SpringDao springDao) {  
        this.springDao = springDao;  
    }  
} 

这种方式只有在需要实例化这个类的时候才会取加载,而不是在程序初始化的时候就注入。但是这种方式我们不能将构造器设置为final类型。

2.3构造器注入

代码:

private SpringDao springDao;
private final InventoryMapper inventoryMapper;
 
    public SpringAction(SpringDao springDao) {
        this.SpringDao = SpringDao;
    }

基于构造器的方式是java推荐的,就是代码量会比较多,并且注入的顺序会按照后面的变量顺序来注入,bean之间最好不要有循环依赖。

3.总结

当我们必须对变量加上final时,使用构造函数注入,可选或多变的依赖使用setter注入,其实在大多数的情况下避免变量注入。如果想让标题中的报警Field injection is not recommended不显示的话,我们可以如下操作Settings->Editor->Inspections->Spring->Spring Core->Core->Field Injection warning将Severity属性值改为 “ No highlighting,only fix ”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值