无法在控制器中自动装配多个服务
Posted
技术标签:
【中文标题】无法在控制器中自动装配多个服务【英文标题】:Couldn't Autowired multiple Services in a Controller 【发布时间】:2019-07-15 14:39:49 【问题描述】:我有两个服务,我想在一个控制器中使用它们。我使用了@Autowired注解和@Qualifier-s,但是有些东西不起作用,可能是因为没有Contructor。
控制器:
@Controller
public class Main
@Autowired
@Qualifier("postServiceImpl")
private PostService postService;
@Autowired
@Qualifier("userServiceImpl")
private UserService userService;
@ModelAttribute("post")
public PostDTO userRegistrationDto()
return new PostDTO();
@GetMapping("/")
public String root(Model model)
model.addAttribute("list", postService.listAllPosts());
return "index";
@GetMapping("/adminPage")
public String admin(Model model)
???
model.addAttribute("posts", postService.listAllPosts());
model.addAttribute("users", userService.listAllUsers());
return "admin";
服务 1:
@Service
public class PostServiceImpl implements PostService
@Autowired
private PostRepository postRepository;
public PostServiceImpl(PostRepository postRepository)
this.postRepository = postRepository;
public PostServiceImpl()
服务 2:
@Service
public class UserServiceImpl implements UserService
@Autowired
private UserRepository userRepository;
@Autowired
private BCryptPasswordEncoder passwordEncoder;
这是在一个模型中添加两个服务属性的正确方法吗?
model.addAttribute("posts", postService.listAllPosts());
model.addAttribute("users", userService.listAllUsers());
【问题讨论】:
实际的错误信息是什么? 【参考方案1】:您需要在服务类上方的@Service 注释中添加限定符名称,如下所示:
@Service("userServImpl")
public class UserServiceImpl implements UserService
@Service("postServImpl")
public class PostServiceImpl implements PostService
或
如果接口只有一种实现,您可以像这样自动装配:
@Autowired
private UserService userServiceImpl;
@Autowired
private PostService postServiceImpl;
请注意,对象名称是特定实现的驼峰式名称。在这种情况下,您无需在@Service 注解中指定限定符名称。
【讨论】:
以上是关于无法在控制器中自动装配多个服务的主要内容,如果未能解决你的问题,请参考以下文章
创建 bean 时出错。注入自动装配的依赖项失败。无法自动装配字段