Автопроводка против создания экземпляров весной - PullRequest
2 голосов
/ 09 сентября 2011

Я недавно начал использовать Spring. И я делаю весенний проект MVC. Поэтому у меня вопрос, предпочитает ли он создавать интерфейсы и автоматически связывать его с конкретной реализацией весной или просто использовать экземпляры класса
в случае, когда у меня есть только одна реализация этого интерфейса?

Например:

@Controller

public class MyController {
    @Autowired
    MyService myService;

    @RequestMap("/")
    public String mainPage() {
        ...
    }
}

или

@Controller

public class MyController {
    @RequestMap("/")
    public String mainPage() {
        MyService myService = new MyServiceImpl();
        ...
    }
}

если существует только одна реализация интерфейса MyService?

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

В большинстве случаев вам следует использовать инъекцию, потому что:

  • Это облегчает модульное тестирование (вы можете ввести макет или другую реализацию)
  • Spring может внедрить некоторые зависимости в MyServiceImplа также потому, что он управляет этим объектом
  • Вы не связываете свой контроллер с конкретной реализацией

Даже если у вашего сервиса нет интерфейса, по второй причине вы должны рассмотреть внедрение.

Единственный случай, когда вы можете пропустить Spring, - это когда класс не имеет никаких зависимостей и не имеет состояния.Но, скорее всего, такой класс - это утилита, которая вообще не нуждается ни в каком экземпляре, потому что она имеет только static членов.

1 голос
/ 04 октября 2011

Это будет зависеть от того, является ли MyService бином, который содержит состояние, или нет.Если MyService не хранит состояние, вам не нужно создавать новые экземпляры, и вы можете позволить Spring внедрить его с преимуществами, описанными выше

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