【问题标题】: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());

【问题讨论】:

  • 实际的错误信息是什么?

标签: java spring spring-boot model-view-controller thymeleaf


【解决方案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 注解中指定限定符名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2013-08-15
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多