Я могу применить приведенный ниже аспект к классу 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?




Обычно, когда Spring AOP не может быть применен к классу, причина в том, что класс не является bean / компонентом Spring. Возможно, это относится к DelegatingMessageSource, как пользователь, не использующий Spring, я не проверял. Если причина не в этом (некоторые эксперты Spring могут сказать вам), возможно, у вас проблема с конфигурацией.
Но если мое предположение верно, единственный способ вплести аспект в этот класс - это настроить Spring на использование полного AspectJ через LTW (ткачество во время загрузки). AspectJ не полагается на динамические прокси, а напрямую встраивается в байт-код исходного класса.
Это не может быть проблемой конфигурации, поскольку я сказал, что он работает с пользовательскими классами. Да, первая причина, которую вы указали, может быть правдой, но не уверен, как я могу подтвердить это, поскольку это встроенный класс / конфигурация Spring?
Я не сказал, что это было. Я предполагаю, что это не компонент Spring, а просто класс pojo. Другое утверждение применимо, только если я ошибаюсь. Но думаю, что прав. Что касается вашего второго вопроса, просто просмотрите все суперклассы и реализованные интерфейсы и проверьте, есть ли, например, аннотация @Component. Или прокрутите список всех активных компонентов / bean-компонентов во время выполнения и проверьте, является ли этот класс одним из них.
Поскольку DelegatingMessageSource не является управляемым Spring компонентом, аспекты к нему применяться не будут. Вот код для вашей ссылки DelegatingMessageSource.
Я бы посоветовал попробовать определить bean-компонент DelegatingMessageSource в одном из ваших классов @Configuration. Возможно, это сработает:
@Bean
public HierarchicalMessageSource messageSource() {
return new DelegatingMessageSource();
}
(Привет, Эмили. Похоже, ваш профиль содержит запрос на объединение профилей. Другая учетная запись, похоже, удалена, поэтому я предполагаю, что это сделано, и сообщение можно удалить?)