2013-08-30 3 views
0

Мы делаем довольно сложный проект, который поражает несколько источников данных. В настоящее время мы выполняем до 64 транзакций веб-сервисов и ожидаем добавления дополнительных. У нас есть определенный сервисный уровень и DAO. Классы уровня обслуживания обычно имеют один или несколько классов DAO, которые выполняют поиск данных. Классы DAO подключаются к классам уровня обслуживания, используя проводку весной xml.Преимущество подключения фасоли

Все классы DAO имеют интерфейс и импл. Ключевым моментом здесь является только один Impl. Хотя импланты могут измениться, хотя даже это маловероятно, так как уровень DAO происходит из стабильной, унаследованной системы.

Итак, в чем преимущество наличия пружинной проводки, если будет только один имплантат? Почему бы просто не создать экземпляр класса в классах уровня обслуживания?

+0

Таким образом, вы можете проверить свои услуги. –

ответ

5

Одной из причин является модульное тестирование, вы не сможете изолировать класс от своих зависимостей с помощью mocks, если класс создает их сами.

Преимущество использования интерфейса в том, что Spring может создавать прокси-серверы AOP (например, для декларативного управления транзакциями) с динамическими прокси-серверами JDK, иначе ему понадобится CGLIB. Из весенних документов - динамические прокси-серверы JDK предпочтительнее, когда у вас есть выбор. http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-proxying -

+0

Хороший ответ, так что +1, однако в нашем случае мы этого не делаем. Хотя мы, вероятно, должны быть. –

+0

ok, добавленный другая причина. –

0

Возможно, для вашей DAO нужна другая конфигурация, нежели только класс реализации (URL источника данных, параметры пула подключений и т. Д.). В философии внедрения зависимостей такие детали должны храниться вне кода, поскольку они представляют собой конфигурацию. Класс сервиса должен содержать строго бизнес-логику.

Сказав, что там была обратная реакция против дескрипторов конфигурации XML на основе в пользу метаданных-кода, например, так:

@Inject 
private CustomerDAO customerDAO; 

Это заставит Spring автоматически впрыскивать CustomerDAOImpl, до тех пор, это единственная реализация CustomerDAO, которую он находит. Класс CustomerDAOImpl может, в свою очередь, иметь другие аннотации с указанием всех необходимых деталей конфигурации.

Смежные вопросы