Вот что я работал над решением для мониторинга с помощью AOP, которое можно распространить на любой компонент. Я постараюсь разбить мою заботу в областях.
Идея:
Иметь механизм, который позволяет определять выражения динамической точки на основе типов, которые являются бобами Spring.
Что я сделал:
Создан компонент, который реализует ApplicationContextAware, который проверяет Spring-контекст и составляет список всех типов и имен бинов, которые следует учитывать для Pointcut.
Проблема:
Проблема в том, что на данный момент я не могу переопределить или использовать какой-либо Pointcut, поскольку процесс Spring AOP уже создал прокси-объекты.
Что я пробовал:
• Реализовал мой собственный Pointcut, Advisor и Advice, который сравнивается с моим списком bean-компонентов, однако он игнорируется.
• Реализован PointcutFactoryBean, который будет предоставлять Pointcut для уже объявленного советника.
• Попытался изменить уже объявленный Pointcut (добавив новое выражение на основе beanIds) и связав его с BeanNameAutoProxyCreator, с перехватчиком, связанным с этим Pointcut. Так, чтобы это было, например:
bean (bean1) || bean (otherBean) и т. д.
При всех этих попытках я наткнулся на одну и ту же проблему: все уже определено и не может быть изменено из контекста.
Вопрос:
Это вообще возможно сделать с Spring AOP? Мы не хотим привлекать к этому какие-либо аспекты AspectJ, такие как ткачество и так далее ...
Подводя итог, я ищу способ создать выражение pointcut и назначить его для pointcut при запуске приложения с учетом всех bean-компонентов.
Надеюсь, что все ясно, если нет, пожалуйста, дайте мне знать, и я сделаю все возможное, чтобы предоставить дополнительную информацию или код.
Заранее большое спасибо!