【发布时间】:2020-07-01 12:41:56
【问题描述】:
我在控制器方法中注入服务时遇到问题。我有以下服务:
@Service
@RequiredArgsConstructor
public class CreateFranchiseUseCase {
private final FranchiseService franchiseService;
private final UserService userService;
private final ACLEntryService aclEntryService;
private final FranchiseDTOMapper franchiseDTOMapper;
public Franchise execute(CreateFranchiseDTO dto) {
// ...
}
}
然后在Controller中:
@RestController
@RequiredArgsConstructor
public class FranchiseController {
// ...
@PostMapping("/api/franchises")
public ResponseEntity<Object> createFranchise(CreateFranchiseDTO dto, CreateFranchiseUseCase useCase) {
Frachise franchise = useCase.execute(dto);
// ...
}
}
当我调用这个端点时,我得到 NullPointerException。异常发生在执行方法和调试方法我发现所有属性:franchiseService、userService、aclEntryService和franchiseDTOMapper都是NULL。
所有类:FranchiseService、UserService 和 ACLEntryService 都带有 @Service 注释。并且FranchiseDTOMapper 被注释为@Mapper(componentModel = "spring")
Spring 是否支持方法注入?或者有什么方法可以在createFranchise() 方法中请求CreateFranchiseUseCase 类的实例,如下所示:
@PostMapping("/api/franchises")
public ResponseEntity<Object> createFranchise(CreateFranchiseDTO dto) {
CreateFranchiseUseCase useCase = container.get(CreateFranchiseUseCase.class) // <-- something like this
Frachise franchise = useCase.execute(dto);
// ...
}
【问题讨论】:
-
好吧,你不知道。您应该通过构造函数将其注入实例级属性,而不是作为方法参数。
-
也许应该可以从 ApplicationContext 获取 bean。
标签: java spring spring-boot dependency-injection autowired