Все ли методы проксируются при использовании Spring AOP?


При использовании Spring АОП для создания прокси-класса с помощью NameMatchMethodPointcutAdvisor и BeanNameAutoProxyCreator это по сути прокси каждого вызова объекта, но только применять советы подобранных методов, или как-то создать прокси-объект, который имеет только те методы, и использует нормальный объект для вызовов, которые должны быть перехвачены?

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

2 4

2 ответа:

Зависит от используемой техники. (Он настраивается атрибутом proxy-target-class в вашей конфигурации aop)

  • Динамические прокси JDK являются прокси по интерфейсу - каждый метод интерфейса проходит через прокси, как вы сказали, и если он совпадает с "рекомендованным" методом, советник применяется. В противном случае он делегируется исходному объекту

  • Прокси CGLIB-это фактически подклассы, определенные во время выполнения ваших конкретных классов. Я не могу быть в этом уверен, но я ... предположим, что переопределены только" рекомендованные " методы, остальные сохраняют определение суперкласса.

Однако, независимо от того, какой механизм используется:

Или каким-то образом создать Проксируемый объект, который имеет только эти методы и использует обычный объект для вызовов, которые должны быть перехвачены?

Как это будет на самом деле работать? Когда класс имеет ссылку на проксируемый класс, он имеет только одну ссылку на него. Он должен либо вызывать прокси-класс, либо класс, не являющийся прокси-классом. Spring не может знать, какие методы вы вызываете, и поэтому не может дать вам один тип, если вам нужно вызвать рекомендованный метод и другой тип, если ты не такой.