2011-12-28 2 views
2

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

Person p = new Person(); 

вобщ

Person p = ctx.getBean("person"); 

Любой помощь на плюсы и минусы были бы оценены.

+0

Вы спрашиваете, какой из них лучше? вопрос немного неясен. –

+0

* В некоторых ситуациях код домена нуждается в инъекции *. Если бы я был вами, я бы попытался избавиться от этих ситуаций. –

+0

Я пытаюсь выяснить, нормально ли создавать прототип компонента всех классов домена – user373201

ответ

0

Очевидно, что для получения прототипа компонента требуется больше накладных расходов, чем просто создание непосредственно с помощью нового ключевого слова (любая инъекция зависимостей, обратные вызовы жизненного цикла и т. Д., Выполняемые контейнером Spring IoC). Несмотря на то, что это не так важно для одного экземпляра, если вы выполнили это в цикле, вы можете увидеть проблемы с производительностью.

Если вам нужны какие-либо одноэлементные компоненты (обычно сервисы) или ресурсы (такие как DataSource), тогда вы предпочтете использовать компонент прототипа. Любые дополнительные зависимости будут подключаться автоматически.

Помимо соображений производительности, ваш выбор также может зависеть от вашего дизайна. Если вы следуете «традиционной» архитектуре с объектами уровня обслуживания и доступа к данным, которые перемещают объекты домена, то все, начиная с точки Spring, обычно является без гражданства. Ваши сервисы и объекты доступа к данным - это однотонные объекты, использующие объекты домена POJO. Здесь вам редко понадобится прототип bean.

Если, с другой стороны, вы следуете более объектно-ориентированному подходу, когда объект имеет фабрику без учета состояния (чтобы позволить экземплярам быть извлеченными или созданными), и тогда объект может сохраняться (скажем, с помощью «сохранения») метод), тогда почти все объекты вашего домена могут быть прототипами.

Как и почти во всех решениях, будут компромиссы и нет правильного ответа.

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