Применяете совет по предоставленному Spring классу?

Я могу применить приведенный ниже аспект к классу Employee, но не к встроенному классу Spring DelegatingMessageSource. Вот определение аспекта

    @Aspect
    @Component
    public class LogCustomAspect {

         //It does not work
         @Before("execution(* org.springframework.context.support.DelegatingMessageSource.getMessage(..))")
        public void logResponse1(JoinPoint jp) {
             System.out.println("Inside logResponse1");
         }

         // It works
         @Before("execution(* com.myproject.Employee.getEmployee(..))")
        public void logResponse2(JoinPoint jp) {
             System.out.println("logResponse2");
         }
    }

Я не уверен, что мне здесь не хватает и как применить класс, предоставленный asspect spring?

(Привет, Эмили. Похоже, ваш профиль содержит запрос на объединение профилей. Другая учетная запись, похоже, удалена, поэтому я предполагаю, что это сделано, и сообщение можно удалить?)

halfer 06.05.2018 10:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
54
2

Ответы 2

Обычно, когда Spring AOP не может быть применен к классу, причина в том, что класс не является bean / компонентом Spring. Возможно, это относится к DelegatingMessageSource, как пользователь, не использующий Spring, я не проверял. Если причина не в этом (некоторые эксперты Spring могут сказать вам), возможно, у вас проблема с конфигурацией.

Но если мое предположение верно, единственный способ вплести аспект в этот класс - это настроить Spring на использование полного AspectJ через LTW (ткачество во время загрузки). AspectJ не полагается на динамические прокси, а напрямую встраивается в байт-код исходного класса.

Это не может быть проблемой конфигурации, поскольку я сказал, что он работает с пользовательскими классами. Да, первая причина, которую вы указали, может быть правдой, но не уверен, как я могу подтвердить это, поскольку это встроенный класс / конфигурация Spring?

emilly 30.04.2018 05:35

Я не сказал, что это было. Я предполагаю, что это не компонент Spring, а просто класс pojo. Другое утверждение применимо, только если я ошибаюсь. Но думаю, что прав. Что касается вашего второго вопроса, просто просмотрите все суперклассы и реализованные интерфейсы и проверьте, есть ли, например, аннотация @Component. Или прокрутите список всех активных компонентов / bean-компонентов во время выполнения и проверьте, является ли этот класс одним из них.

kriegaex 30.04.2018 05:36

Поскольку DelegatingMessageSource не является управляемым Spring компонентом, аспекты к нему применяться не будут. Вот код для вашей ссылки DelegatingMessageSource.

Я бы посоветовал попробовать определить bean-компонент DelegatingMessageSource в одном из ваших классов @Configuration. Возможно, это сработает:

@Bean
public HierarchicalMessageSource messageSource() {
    return new DelegatingMessageSource();
}

Другие вопросы по теме