@ Автосоединение на уроках весной - PullRequest
1 голос
/ 06 февраля 2020

У меня небольшой вопрос. Если класс аннотирован с помощью @ Component, @Service, @Controller или @ Repository и я хочу внедрить его зависимость, нужно ли мне @Autowired?

@RestController
@RequestMapping(value = "/goods", produces = APPLICATION_JSON_VALUE)
@SuppressWarnings("squid:S4684")
public class UserDeviceRestController implements UserDeviceRestApi {

  private final UserDeviceService userDeviceService;

  public UserDeviceRestController(UserDeviceService userDeviceService) {
    this.userDeviceService = userDeviceService;
  }

Этот код отлично работает для меня, потому что это аннотация @Service, указанная в UserDeviceService. Это из-за этого?

Если бы у меня был класс без одной из этих аннотаций (выделен жирным шрифтом), я предполагаю, что мне нужно @Autowired это в конструкторе / поле / сеттер, тогда ... Так почему бы не указать @ Компонент выше всех возможных зависимостей внедряет классы и не помнит про @ Autowired

Спасибо за подсказки

Ответы [ 2 ]

3 голосов
/ 06 февраля 2020

Если у вас есть только один конструктор, вам не нужно @Autowired. Если у вас их несколько, вы должны указать String, какой именно конструктор следует использовать. В этом случае необходимо @Autowired.

1 голос
/ 06 февраля 2020

@ Autowired по умолчанию использует инжекцию поля. Вам не нужно писать этот конструктор или любой установщик для него. Просто любая из упомянутых вами аннотаций будет работать. Таким образом, все эти аннотации сделают бины класса. Вот подробности, что делают эти аннотации.

 @Component is a generic stereotype for any Spring-managed component or bean. 
    @Repository is a stereotype for the persistence layer.
    @Service is a stereotype for the service layer.
    @Controller is a stereotype for the presentation layer (spring-MVC).

С Spring 4.3 аннотации не требуются для инжектора конструктора.

извлечение этого поста Ввод пружины без аннотации с автопроводкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...