Вот что, я работал над решением мониторинга с AOP, которое может быть распространено на любой компонент. Я постараюсь нарушить свою озабоченность в областях.Динамическое выражение Pointcut.
Идея:
Имейте механизм, который позволяет определять динамические выражения pointcut на основе типов, которые являются фасолью Spring.
Что я сделал:
создал компонент, который реализует ApplicationContextAware, который проверяет пружинный контекст и делает список всех типов боба и имена, которые следует учитывать для Pointcut.
Проблема:
Проблема в том, что на данный момент я не могу переопределить или использовать какой-либо Pointcut, так как процесс Spring AOP уже создал проксированные объекты.
Что я пробовал:
• Реализована моя собственная Pointcut, советник и совет, которая сравнивается с моим списком бобов, однако, это игнорируется.
• Реализована PointcutFactoryBean, которая была бы той, которая предоставляет Pointcut для уже объявленного советника.
• Пробовал модифицировать уже объявленный Pointcut (добавление нового выражения на основе beanIds) и связать его с BeanNameAutoProxyCreator с помощью Interceptor, связанного с этим Pointcut. Так, чтобы это имело, например:
bean (bean1) || bean (otherBean) и т. д.
Со всеми этими попытками я наткнулся на одну и ту же проблему, все уже определено и не может быть изменено из контекста.
Вопрос:
Возможно ли это сделать с Spring AOP? Мы не хотим привлекать к этому какие-либо вопросы AspectJ, такие как плетение и т. Д. ... Подводя итог, я ищу способ создания выражения pointcut и назначить его pointcut при запуске приложения, принимая учитывая все бобы.
Надеюсь, что я был ясен, если нет, сообщите мне, и я сделаю все возможное, чтобы предоставить дополнительную информацию или код.
Большое спасибо!
Есть ли способ создать динамические точки без пружины, просто aspectj? Я ищу, чтобы создать pointcut с некоторыми параметрами, такими как имя класса или пакета, поступающие с пользовательского ввода.Спасибо – AbhilashK
Да, но вам понадобится привязка к вашим объектам, в основном в том случае, когда Spring AOP помогает вам. http://www.adevedo.com/content/using-aspectj-log-all-methods-parameters-and-return-values-during-application-runtime – LdSe
@AbhilashK можно применить динамическое выражение для точечного сокращения во время выполнения для контроля выполнения метода. Кроме того, если возможно создать/уничтожить новый компонент аспект (вместо изменения выражения точечной резки). Случай использования такой же, как вы упомянули, когда нам нужно найти какую-то ошибку или время выполнения выполнения метода, мы предоставляем эти рекомендации в процессе производства и отключаем один раз, когда монитор не нужен. – Nitul