@RequiredArgsConstructor实现依赖注入

200 阅读2分钟

摘要

依赖注入的三种方式:构造器注入、字段注入、Setter注入。本文使用Lombok的注解@RequiredArgsConstructor来实现构造器注入,并说明它与@Autowired字段/Setter注入的区别。

两者区别

@RequiredArgsConstructor+private final

Spring推荐Spring4.x以后官方推荐构造器注入
空指针安全启动时就要求所有final依赖必须注入,运行期不可能出现空指针异常 
不可变性字段天生final,对象一经创建就不可改变
测试方式只需要new就可单元测试,无需Spring/SpringBootTest
循环依赖检测启动时若出现循环依赖直接抛异常,提前暴露问题
可选依赖全部依赖都必须在构造器里,可选依赖需改用@Nullable或@Autowired(required=false) 
代码量无样板代码

@Autowired

Spring推荐官方已不推荐使用字段注入
空指针安全允许先new对象再注入,运行期可能出现空指针异常
不可变性字段可变,可能被反射或测试代码二次修改
测试方式必须使用Spring/SpringBootTest 
循环依赖检测字段注入能在某些场景会自动解决循环依赖
可选依赖选依赖可直接@Autowired(required=false) 
代码量字段/Setter需写注解,构造器需手写或用Lombok注解

代码示例

@RequiredArgsConstructor

package org.coffeebeans.service;

import lombok.RequiredArgsConstructor;
import org.coffeebeans.mapper.UserMapper;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class DemoService {
    private final DemoMapper demoMapper;
    
    /*
    自动实现了构造器
    public DemoService(DemoMapper demoMapper) {
        this.demoMapper = demoMapper;
    }
    */

    public void test() {
       demoMapper.xxx;
    }
}

@Autowired

package org.coffeebeans.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.coffeebeans.mapper.UserMapper;
import org.springframework.stereotype.Service;

@Service
public class DemoService {
    @Autowired
    private DemoMapper demoMapper;

    public void test() {
       demoMapper.xxx;
    }
}

总结

以上我们了解了如何使用Lombok注解@RequiredArgsConstructor来实现构造器注入的方式。

关注公众号:咖啡Beans

在这里,我们专注于软件技术的交流与成长,分享开发心得与笔记,涵盖编程、AI、资讯、面试等多个领域。无论是前沿科技的探索,还是实用技巧的总结,我们都致力于为大家呈现有价值的内容。期待与你共同进步,开启技术之旅。