2016-12-29 11 views
2

У меня есть приложение для загрузки весны с некоторыми контроллерами 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 на основе, если это возможно

Пожалуйста, дайте мне знать, если больше деталей необходимы

ответ

3

Использовать -javaagent:/path/to/aspectjweaver-<version>.jar как startu p для вашего JVM, чтобы включить переплетение во времени. Удалите @EnableAspectJAutoProxy из вашей конфигурации пружины, чтобы пружина не пыталась использовать собственную Spring AOP вместо чистого AspectJ. При необходимости создайте META-INF/aop.xml. Добавьте @EnableSpringConfigured, если вы хотите применить конфигурацию пружины к фасоли, которым не управляет пружина (@Configurable POJO).

+0

Я прочитал аналогичные комментарии о переполнении стека, но мне интересно, почему он не работает с EnableLoadTimeWeaving, включенным в конфигурацию. Я НЕ включал EnableAspectJAutoProxy, поэтому пружина не должна мешать процессу ткачества. Кроме того, сервер развертывания может не находиться под моим контролем, поэтому скептически относится к добавлению аргументов VM командной строки. Для последней части вы имеете в виду, что каждый класс, который не управляется весной, должен быть аннотирован с помощью «Конфигурируемый»? – Avi

+1

'@ EnableLoadTimeWeaving' работает через магию загрузчика классов. Выполнение такого рода вещей при загрузке классов всегда сопряжено с риском, поэтому я стараюсь избегать его, когда это возможно. Вот почему я никогда не использую '@ EnableLoadTimeWeaving' Spring. Посмотрите на иерархию классов LoadTimeWeaver, чтобы узнать, какие среды поддерживаются. Затем выберите свою среду и посмотрите документацию конкретного класса реализации для любой дополнительной конфигурации, которую вы, возможно, должны предоставить. Конечно, лучше всего было бы избавиться от всего этого и просто пойти с плетением времени компиляции. Или просто возьмите под свой контроль свои серверы и используйте агент –

+0

Например, если вы используете версии Tomcat [6..8], вам нужно явно указать загрузчик классов: '' в файле 'META-INF/context.xml' в вашей войне. –

 Смежные вопросы

  • Нет связанных вопросов^_^