Когда вы начинаете возиться с авто-прокси Spring, вы часто сталкиваетесь с этим, как описано в документации:
Классы, которые реализуют
Интерфейс BeanPostProcessor является
особенные, и поэтому к ним относятся
по-разному контейнером. Все
BeanPostProcessors и их напрямую
ссылочные бины будут созданы
при запуске, как часть специального
фаза запуска
ApplicationContext, тогда все те
BeanPostProcessors будут зарегистрированы
в сортированном виде - и применяется к
все дальнейшие бобы. С АОП
Авто-проксирование реализовано как
Сам BeanPostProcessor, нет
BeanPostProcessors или напрямую
указанные бобы имеют право на
авто-проксирование (и, следовательно, не будет иметь
аспекты «вплетены» в них.
Для любого такого боба вы должны увидеть
сообщение в журнале информации: «Bean« foo »не является
право на получение обработки всеми
BeanPostProcessors (например: не
право на авто-проксирование) ».
Другими словами, если я напишу свой собственный BeanPostProcessor, и этот класс напрямую ссылается на другие bean-компоненты в контексте, то эти ссылочные bean-объекты не будут иметь права на автоматическое проксирование, и сообщение будет зарегистрировано с этой целью.
Моя проблема в том, что отслеживание того, где находится эта прямая ссылка, может быть очень трудным, поскольку «прямая ссылка» на самом деле может быть цепочкой переходных зависимостей, которая в конечном итоге принимает половину компонентов в контексте приложения. Все, что Spring дает вам, - это единственное информационное сообщение, и оно не очень помогает, кроме того, чтобы сообщать вам, когда боб был пойман в этой сети ссылок.
Разрабатываемый мной BeanPostProcessor имеет прямые ссылки на другие bean-компоненты, но это очень ограниченный набор ссылок. Несмотря на это, в соответствии с сообщениями журнала, почти каждый бин в моем контексте исключается из автоматического прокси-сервера, но я не вижу, где происходит эта зависимость.
Кто-нибудь нашел лучший способ отследить это?