当前位置: 首页 > 知识库问答 >
问题:

springboot - 不使用 @Autowired 和 @Resource, 它是怎么注入的?

丁和歌
2023-07-31
项目: el-admin 后台

代码如下

image.png

deptService 对象没有用过注解, 为什么还能调用 deptService.download ? 有没有大佬知道这个对象是怎么被实例化的?

完整的 DeptController 代码如下

/* *  Copyright 2019-2020 Zheng Jie * *  Licensed under the Apache License, Version 2.0 (the "License"); *  you may not use this file except in compliance with the License. *  You may obtain a copy of the License at * *  http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, software *  distributed under the License is distributed on an "AS IS" BASIS, *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  See the License for the specific language governing permissions and *  limitations under the License. */package me.zhengjie.modules.system.rest;import cn.hutool.core.collection.CollectionUtil;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import lombok.RequiredArgsConstructor;import me.zhengjie.annotation.Log;import me.zhengjie.exception.BadRequestException;import me.zhengjie.modules.system.domain.Dept;import me.zhengjie.modules.system.service.DeptService;import me.zhengjie.modules.system.service.dto.DeptDto;import me.zhengjie.modules.system.service.dto.DeptQueryCriteria;import me.zhengjie.utils.PageResult;import me.zhengjie.utils.PageUtil;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.util.*;import java.util.stream.Collectors;/*** @author Zheng Jie* @date 2019-03-25*/@RestController@RequiredArgsConstructor@Api(tags = "系统:部门管理")@RequestMapping("/api/dept")public class DeptController {    private final DeptService deptService;    private static final String ENTITY_NAME = "dept";    @ApiOperation("导出部门数据")    @GetMapping(value = "/download")    @PreAuthorize("@el.check('dept:list')")    public void exportDept(HttpServletResponse response, DeptQueryCriteria criteria) throws Exception {        deptService.download(deptService.queryAll(criteria, false), response);    }    // ...}

共有1个答案

尚楚
2023-07-31

是使用 Lombok@RequiredArgsConstructor 注解实现构造函数注入的,详细可查看Lombok文档@RequiredArgsConstructor,该注解可以为所有未初始化的 final 字段以及标记为 @NonNull 的字段生成构造函数。

@RequiredArgsConstructor generates a constructor with 1 parameter for each field that requires special handling. All non-initialized final fields get a parameter, as well as any fields that are marked as @NonNull that aren't initialized where they are declared. For those fields marked with @NonNull, an explicit null check is also generated. The constructor will throw a NullPointerException if any of the parameters intended for the fields marked with @NonNull contain null. The order of the parameters match the order in which the fields appear in your class.

另外可查看Spring Boot官方文档Spring Beans and Dependency Injection中关于依赖注入的相关说明。

We generally recommend using constructor injection to wire up dependencies.
import org.springframework.stereotype.Service;@Servicepublic class MyAccountService implements AccountService {    private final RiskAssessor riskAssessor;    public MyAccountService(RiskAssessor riskAssessor) {        this.riskAssessor = riskAssessor;    }    // ...}
 类似资料:
  • 问题内容: @Inject和@Resource以及@Autowired注释有什么区别? 我们什么时候应该使用它们? 问题答案: 和注释@Inject和有什么区别?@Resource@Autowired 我们什么时候应该使用它们?@Inject与@Autowire与@Resource之间的区别? @Autowired:spring专有注释(与@Inject和@Resource相反),按类型(即,通过

  • 本文向大家介绍JAVA解决在@autowired,@Resource注入为null的情况,包括了JAVA解决在@autowired,@Resource注入为null的情况的使用技巧和注意事项,需要的朋友参考一下 使用SpringMVC或者SSH过程中,有时可能会遇到这么一个问题。就是在一个普通的JAVA类(不是controller也不是action类)中无法注入在spring配置文件中配置的bea

  • 我想把@AutoWired注释变成一个“方面”。我想在我的方面中注入一个存储库,但是当我试图调用autowired类的方法时,出现了NullPointException。 我已经尝试在aspect类上添加,但我出现了同样的错误。 如果我不使用aspect类,而是使用,我可以毫无问题地调用存储库。 一些文档谈到了spring的xml文件配置,但在spring boot,我没有这些文件。 这里是pom

  • 问题内容: 我应该在DI中使用哪个批注或(特定于Spring)? 我已经成功地在过去使用两种,和 我的直觉是坚持使用该标签,因为它已被jsr人士批准。 有人对此有强烈的想法吗? 问题答案: 在3.0之前的spring中,哪一个都不重要。 在Spring 3.0中,支持标准(JSR-330)注释-将其与结合使用。请注意,spring现在还支持元注释: 所以你可以有 要么 然后: 这样就减少了字符串名

  • 问题内容: 我应该在DI中使用哪个批注或(特定于)? 我已经成功地在过去使用两种,和 我的直觉是坚持使用该标签,因为它已被人士批准。 有人对此有强烈的想法吗? 问题答案: 在3.0之前的spring中,哪一个都不重要。 在Spring 3.0中,支持标准(JSR-330)注释将其与结合使用。请注意,现在还支持元注释: 所以你可以有 要么 接着: 这样就减少了字符串名称的使用,因为字符串名称可能会拼

  • 也许给出问题的最好方法是在下面显示代码: