在Spring提供的课程中提供建议吗?

时间:2018-04-29 16:17:24

标签: java spring spring-aop

我可以在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");
         }
    }

我不确定我在这里缺少什么,以及如何申请春天提供的课程?

2 个答案:

答案 0 :(得分:0)

通常,当Spring AOP无法应用于类时,原因是该类不是Spring bean /组件。也许这适用于DelegatingMessageSource,作为我没有检查过的非Spring用户。如果这不是原因(一些Spring专家可能会告诉你)可能你有配置问题。

但如果我的假设是正确的,那么将一个方面编织到该类中的唯一方法是将Spring配置为使用完整的AspectJ via LTW (load-time weaving)。 AspectJ不依赖于动态代理,而是直接编织到原始类的字节码中。

答案 1 :(得分:0)

由于DelegatingMessageSource不是Spring托管bean,因此不会应用方面。以下是供您参考的代码DelegatingMessageSource

我建议尝试在DelegatingMessageSource个类中定义一个@Configuration的bean。也许这会奏效:

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