Я настроил приложение Spring (использующее Camel для интеграции с брокером ActiveMQ) таким образом, что два конкретных класса, скажем, Person
и Personality
, подключаются и автоматически внедряются со всеми их зависимостями через Spring контейнер. В этом примере Person
объекты имеют Personality
объекты в качестве элементов / свойств. Таким образом, конфигурационный файл Spring связывает экземпляр Personality
, и эти bean-компоненты упоминаются в проводных People
bean-компонентах:
<bean id="personality" class="com.me.someProgram.Personality" singleton="false">
<!-- blah... -->
</bean>
<bean id="person" class="com.me.someProgram.Person" singleton="false">
<!-- People have Personalities -->
<property name="personality" ref="personality"/>
<!-- blah... -->
</bean>
Оба компонента определены как прототипы в области видимости, потому что это имеет смысл для моего приложения. По сути, мне нужно захватывать новый экземпляр Personality
каждый раз, когда я получаю новый Person
.
Мой вопрос:
Это мое первое приложение, использующее Spring и IoC / внедрение зависимостей в целом. Я беспокоюсь о сборке мусора и утечке памяти. Когда bean-компоненты являются прототипами, а у вас есть прототипы, вложенные в прототипы (через отношение has-a ), нужно ли вам беспокоиться об утечках памяти и ГХ? Или контейнер Spring облегчает все эти проблемы для вас? Существуют ли передовые практики в отношении управления памятью Spring / IoC? Какие-нибудь анти-паттерны, чтобы избежать?
Мои настоящие бизнес-объекты довольно большие, и я буду производить многие из них, поэтому, если я начну идти по дороге, изобилующей плохим управлением памятью, это будет очень, очень ухабистая поездка.
Спасибо!