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