基本原理
@RequiredArgsConstructor 是 Lombok 库中的一个注解,用于自动生成一个包含所有带有 @NonNull 注解的成员变量的构造函数。这个注解通常用于简化 Java 类的编写,特别是用于创建不可变对象时很有用。在使用 @RequiredArgsConstructor 注解后,Lombok 会为每个带有 @NonNull 注解的成员变量生成一个对应的参数,并在构造函数中进行初始化。这样可以减少重复的样板代码,提高代码的可读性和可维护性。
例如,以下是一个使用 @RequiredArgsConstructor 注解的示例:
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class MyClass {
private final String name;
@NonNull private final Integer age;
private String address;
// 生成的构造函数包含所有带有 @NonNull 注解的成员变量
}
eladmin项目应用场景
在eladmin项目中,controller或service层中需要注入多个mapper接口或者另外的service接口,这时候代码中就会有多个@AutoWired注解,使得代码相对混乱。这时候, @RequiredArgsConstructor 写在类上面可以代替@AutoWired注解,需要注意的是:在注入的时候需要用final定义,或者使用@notnull注解。
package me.zhengjie.modules.system.rest;
import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import me.zhengjie.annotation.Log;
import me.zhengjie.modules.system.domain.Role;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.domain.vo.RoleQueryCriteria;
import me.zhengjie.utils.PageResult;
import me.zhengjie.utils.SecurityUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author Zheng Jie
* @date 2018-12-03
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "系统:角色管理")
@RequestMapping("/api/roles")
public class RoleController {
private final RoleService roleService;
private static final String ENTITY_NAME = "role";
@ApiOperation("获取单个role")
@GetMapping(value = "/{id}")
@PreAuthorize("@el.check('roles:list')")
public ResponseEntity<Role> findRoleById(@PathVariable Long id){
return new ResponseEntity<>(roleService.findById(id), HttpStatus.OK);
}