Я работал над проектом в течение нескольких месяцев, даже не замечая этого, и вчера, после редактирования файла класса (вставка нового компонента зависимостей с его getter / setter), я забыл явно добавить:
<property name="deviceService" ref="deviceService"/>
в соответствующем весеннем контексте xml.
Я опубликовал свое веб-приложение на tomcat, ввел отладку, и в тот момент, когда я увидел строку кода, использующую этот компонент службы, я понял, что забыл объявить его как зависимость.
Но затем произошла странная вещь - боб все же был введен ...
Такое поведение меня немного смущает. Я, конечно, не весенний эксперт, я использую его в течение последних нескольких месяцев, однако я не ожидал, что это станет возможным. Название поля класса, как можно видеть, совпадает с вводимым компонентом, если это имеет значение. В отладчике я увидел нечто подобное для поля зависимости:
deviceService=$Proxy5 (id=107)
* h=JdkDynamicAopProxy (id=147)
так что я предполагаю, что это как-то связано с пружинным АОП.
Я должен добавить, что я не запускал этот проект с нуля, он уже был настроен, он использует spring-aop для разграничения транзакций и некоторых целей ведения журнала.
EDIT
Некоторая дополнительная информация: проект объединяет ZK Ajax и Hibernate. Этот служебный бин по сути является оберткой вокруг бина DAO; DAO bean, в свою очередь, является оболочкой для весеннего HibernateTemplate. Служебные и DAO-бины имеют одностороннюю область действия. Сервис, который внедряется, внедряется в bean-компонент контроллера MVC с прототипом. Служебный компонент входит в пакет, используемый для разграничения транзакций БД:
<tx:advice id="serviceTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceMethodsRMS"
expression="execution(* org.irvas.amregina.backend.service.*.*(..))" />
<aop:advisor advice-ref="serviceTxAdvice" pointcut-ref="serviceMethodsRMS" />
</aop:config>
Так, может кто-нибудь объяснить мне, что происходит, или что может быть причиной этого?
Спасибо.