Не удалось автоматически подключить несколько служб в контроллере - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть две службы, которые я хочу использовать в одном контроллере.Я использую аннотацию @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 Ответ

0 голосов
/ 21 февраля 2019

Вы должны добавить имена квалификаторов в аннотации @Service над классами обслуживания, например, так:

@Service("userServImpl")
public class UserServiceImpl implements UserService {

@Service("postServImpl")
public class PostServiceImpl implements PostService {

ИЛИ

Если есть только одна реализация для интерфейса, которую вы можете автоматически связать, например:итак:

@Autowired
private UserService userServiceImpl;

@Autowired
private PostService postServiceImpl;

Обратите внимание, что имена объектов являются именами в случае верблюдов для конкретной реализации.В этом случае вам не нужно указывать имя квалификатора в аннотации @Service.

...