Мысли о коде к интерфейсу весной? - PullRequest
1 голос
/ 24 февраля 2010

Я знаю, что весной мы все кодируем интерфейс. Таким образом, класс реализации вообще не должен быть известен внешнему миру. Но это открытый класс, поэтому любой может сделать экземпляр класса реализации. Как вы можете предотвратить это? Вы делаете конструктор приватным? Поскольку весна создает пример сквозного отражения, все должно быть хорошо. Кто-нибудь задумывался над этим? Я знаю, что если вы сделаете экземпляр класса реализации, он не будет работать должным образом, потому что все зависимости null, но это не относится к делу.

Ответы [ 3 ]

6 голосов
/ 24 февраля 2010

Целью внедрения зависимости Spring является не просто скрыть класс реализации.
Суть в том, что вам не нужно беспокоиться о том, какой класс реализации использовать. Мы возлагаем ответственность за предоставление класса на контейнер Spring.

Основная идея внедрения зависимостей состоит в том, чтобы иметь отдельный объект, ассемблер, который заполняет поле в классе lister соответствующей реализацией для интерфейса поиска.

1 голос
/ 24 февраля 2010

Я не уверен, но я предполагаю, что с помощью Spring вы можете сделать пакет реализации класса закрытым, а не публичным. Я знаю, что это хорошая практика с Guice.

0 голосов
/ 24 февраля 2010

Если вам нужен только один экземпляр во всем приложении, вы можете использовать фабричные методы / синглтоны. Этот же метод будет использоваться и другими классами, ссылающимися на этот класс.

С http://static.springsource.org/spring/docs/2.0.x/reference/beans.html

3.2.3.2.2. Реализация с использованием статического фабричного метода

 <bean id="exampleBean"
       class="examples.ExampleBean2"
       factory-method="createInstance"/>
...