моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
@RequiredArgsConstructor реализует внедрение конструктора
@Autowired
и@Resource
аннотация@Autowired
@Autowired
Это аннотация, предоставляемая средой Spring и используемая для автоматической сборки зависимостей.@Autowired
private ISysUserService userService;
@Resource
@Resource
Это аннотация, предоставляемая Java EE, и Spring также поддерживает ее для автоматической сборки зависимостей.@Resource
private ISysUserService userService;
@RequiredArgsConstructor
@RequiredArgsConstructor
— это аннотация, предоставленная Lombok, которая автоматически генерирует всеfinal
Полевой конструктор.@RequiredArgsConstructor
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
private final ISysUserService userService;
private final ISysRoleService roleService;
private final ISysPostService postService;
private final ISysDeptService deptService;
private final ISysUserPostService userPostService;
// 构造函数由 Lombok 自动生成,注入所有 final 字段
}
@Autowired
и@Resource
)@RequiredArgsConstructor
Это бремя можно облегчить.@Autowired
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
@Autowired
private ISysUserService userService;
@Autowired
private ISysRoleService roleService;
@Autowired
private ISysPostService postService;
@Autowired
private ISysDeptService deptService;
@Autowired
private ISysUserPostService userPostService;
// 其他代码
}
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
private final ISysUserService userService;
private final ISysRoleService roleService;
private final ISysPostService postService;
private final ISysDeptService deptService;
private final ISysUserPostService userPostService;
// 其他代码
}
Благодаря этому методу внедрения конструктора можно не только повысить надежность и удобство сопровождения кода, но и лучше использовать преимущества функции внедрения зависимостей Spring и упрощенного кода Lombok.
Spring's Constructor Injection_spring Constructor Injection-Блог CSDN
При использовании внедрения конструктора нет необходимости добавлять дополнительные аннотации, вам нужно только предоставить конструктор. Spring автоматически обнаружит ваш конструктор и выполнит внедрение зависимостей.
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController {
private final ISysUserService userService;
private final ISysRoleService roleService;
private final ISysPostService postService;
private final ISysDeptService deptService;
private final ISysUserPostService userPostService;
// 自己编写构造函数
public SysUserController(ISysUserService userService,
ISysRoleService roleService,
ISysPostService postService,
ISysDeptService deptService,
ISysUserPostService userPostService) {
this.userService = userService;
this.roleService = roleService;
this.postService = postService;
this.deptService = deptService;
this.userPostService = userPostService;
}
}
Образец кода
package com.example.demo.controller;
import com.example.demo.service.ISysUserService;
import com.example.demo.service.ISysRoleService;
import com.example.demo.service.ISysPostService;
import com.example.demo.service.ISysDeptService;
import com.example.demo.service.ISysUserPostService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/system/user")
public class SysUserController {
private final ISysUserService userService;
private final ISysRoleService roleService;
private final ISysPostService postService;
private final ISysDeptService deptService;
private final ISysUserPostService userPostService;
// 构造函数注入
public SysUserController(ISysUserService userService,
ISysRoleService roleService,
ISysPostService postService,
ISysDeptService deptService,
ISysUserPostService userPostService) {
this.userService = userService;
this.roleService = roleService;
this.postService = postService;
this.deptService = deptService;
this.userPostService = userPostService;
}
// 你的控制器方法
}
В этом примере нет необходимости использовать какие-либо дополнительные аннотации для аннотирования конструктора: Spring автоматически определит и внедрит зависимость. (Конечно, если этот флажок установлен, об ошибке не будет сообщено, но можно использовать только @Autowired, а @Resouce использовать нельзя.@Resource
Аннотации обычно используются для внедрения метода поля или установщика)
@Autowired
аннотация, чтобы явно указать, какой конструктор использовать.Пример кода (несколько конструкторов)
package com.example.demo.controller;
import com.example.demo.service.ISysUserService;
import com.example.demo.service.ISysRoleService;
import com.example.demo.service.ISysPostService;
import com.example.demo.service.ISysDeptService;
import com.example.demo.service.ISysUserPostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/system/user")
public class SysUserController {
private final ISysUserService userService;
private final ISysRoleService roleService;
private final ISysPostService postService;
private final ISysDeptService deptService;
private final ISysUserPostService userPostService;
// 使用 @Autowired 明确指定使用哪个构造函数
@Autowired
public SysUserController(ISysUserService userService,
ISysRoleService roleService,
ISysPostService postService,
ISysDeptService deptService,
ISysUserPostService userPostService) {
this.userService = userService;
this.roleService = roleService;
this.postService = postService;
this.deptService = deptService;
this.userPostService = userPostService;
}
// 另一个构造函数
public SysUserController(ISysUserService userService) {
this.userService = userService;
this.roleService = null;
this.postService = null;
this.deptService = null;
this.userPostService = null;
}
// 你的控制器方法
}
В этом примере, поскольку существует несколько конструкторов, вам нужно использовать @Autowired
Аннотации, позволяющие явно указать, какой конструктор Spring использует для внедрения зависимостей.