У меня есть приложение для загрузки весны с некоторыми контроллерами REST, классами обслуживания и вспомогательными классами. Контроллеры и классы обслуживания управляются весной, а вспомогательные классы не управляются весной и в основном содержат статические методы.Загрузка времени плетения для не-весенних бобах в весеннем приложении
Конфигурация AspectJ присутствует в конфигурации Java следующим
@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
public class AspectConfig {
@Bean
public LoggingAspect loggingAspect() {
return new LoggingAspect();
}
}
Соответствующий класс LoggingAspect выглядит следующим образом,
@Aspect
public class LoggingAspect {
@Before("allMethodsPointcut()")
public void logBeforeMethod(JoinPoint joinPoint) {
System.out.println("Entering Method - " + joinPoint.getSignature().getDeclaringType() + "::" + joinPoint.getSignature().getName());
}
@After("allMethodsPointcut()")
public void logAfterMethod(JoinPoint joinPoint) {
System.out.println("Exiting Method - " + joinPoint.getSignature().getDeclaringType() + "::" + joinPoint.getSignature().getName());
}
@Pointcut("execution(* com.test.controller..*(..)) || execution(* com.test.service..*(..)) || execution(* com.test.helper..*(..))")
public void allMethodsPointcut() {
}
}
- Когда контроллер называется, Аспект включено ведение журнала работает контроллер и сервисные функции, но не вспомогательные функции.
- Если мы проверим вспомогательный класс в контроллере, методы статического помощника начнут показывать журналы aspectj. Тем не менее, статические вспомогательные методы до сих пор не показывают AspectJ журналы
Вопросы, 1. Как мы можем настроить совет AspectJ для классов, которые не пружинные удалось т.е. без @Bean, @Autowired, @Component и т.д. 2. Как мы можем настроить советы AspectJ для статических методов (я использую @EnableLoadTimeWeaving но, возможно, я что-то отсутствует) конфигурация 3. AspectJ должен быть Java на основе, если это возможно
Пожалуйста, дайте мне знать, если больше деталей необходимы
Я прочитал аналогичные комментарии о переполнении стека, но мне интересно, почему он не работает с EnableLoadTimeWeaving, включенным в конфигурацию. Я НЕ включал EnableAspectJAutoProxy, поэтому пружина не должна мешать процессу ткачества. Кроме того, сервер развертывания может не находиться под моим контролем, поэтому скептически относится к добавлению аргументов VM командной строки. Для последней части вы имеете в виду, что каждый класс, который не управляется весной, должен быть аннотирован с помощью «Конфигурируемый»? – Avi
'@ EnableLoadTimeWeaving' работает через магию загрузчика классов. Выполнение такого рода вещей при загрузке классов всегда сопряжено с риском, поэтому я стараюсь избегать его, когда это возможно. Вот почему я никогда не использую '@ EnableLoadTimeWeaving' Spring. Посмотрите на иерархию классов LoadTimeWeaver, чтобы узнать, какие среды поддерживаются. Затем выберите свою среду и посмотрите документацию конкретного класса реализации для любой дополнительной конфигурации, которую вы, возможно, должны предоставить. Конечно, лучше всего было бы избавиться от всего этого и просто пойти с плетением времени компиляции. Или просто возьмите под свой контроль свои серверы и используйте агент –
Например, если вы используете версии Tomcat [6..8], вам нужно явно указать загрузчик классов: ' ' в файле 'META-INF/context.xml' в вашей войне. –