美文网首页
Spring AOP 组件 (Advice, Advisor,

Spring AOP 组件 (Advice, Advisor,

作者: Tinyspot | 来源:发表于2023-12-19 11:25 被阅读0次

    1. Advice, Advisor 和 Advised

    Advice 表示增强,有多种增强类型 (BeforAdvice, AfterReturningAdvice 等)

    package org.aopalliance.aop;
    public interface Advice {
    }
    

    Advisor 持有 Advice

    public interface Advisor {
        Advice EMPTY_ADVICE = new Advice() {};
    
        Advice getAdvice();
    
        boolean isPerInstance();
    }
    

    Advised 是 AOP 代理工厂配置类接口,提供操作和管理 Advice 和 Advisor 的能力

    public interface Advised extends TargetClassAware {
        // ...
        Advisor[] getAdvisors();
        void addAdvisor(Advisor advisor) throws AopConfigException;
    
        void addAdvice(Advice advice) throws AopConfigException;
    }
    

    2. Advice (增强)

    @Configuration
    public class BusinessInterceptorConfig {
    
        @Bean
        public Advice loginInterceptor() {
            return new LoginInterceptor();
        }
    }
    
    @Slf4j
    public class LoginInterceptor implements MethodInterceptor {
        @Override
        public Object invoke(MethodInvocation invocation) throws Throwable {
            log.info(this.getClass().getSimpleName() + "; " + invocation.getMethod().getName());
            return invocation.proceed();
        }
    }
    

    3. Advisor(通知器)

    • 连接 Advice 和 Pointcut
    @Configuration
    public class BusinessInterceptorConfig {
        @Bean
        public Advisor businessAdvisor() {
            MyInterceptor myInterceptor = new MyInterceptor();
            DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor();
            AnnotationMatchingPointcut pointcut = new AnnotationMatchingPointcut(null, InterceptAnno.class, true);
            advisor.setPointcut(pointcut);
            advisor.setAdvice(myInterceptor);
            return advisor;
        }
    }
    

    或者

    @Configuration
    public class MyInterceptorConfig {
        @Bean
        public Advice myInterceptor() {
            return new MyInterceptor();
        }
    
        @Bean
        public Advisor pointcutAdvisor() {
            DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor();
            // 设置 checkInherited = true
            // AnnotationMatchingPointcut pointcut = new AnnotationMatchingPointcut(null, InterceptAnno.class, true);
            AnnotationMatchingPointcut pointcut = new AnnotationMatchingPointcut(InterceptAnno.class, true);
            advisor.setPointcut(pointcut);
            advisor.setAdvice(myInterceptor());
            return advisor;
        }
    }
    

    相关文章

      网友评论

          本文标题:Spring AOP 组件 (Advice, Advisor,

          本文链接:https://www.haomeiwen.com/subject/boyzgdtx.html