zoukankan      html  css  js  c++  java
  • Spring-Boot:拦截器注解范例

    package com.example.aop;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    /**
     * Created by liz19 on 2017/1/30.
     */
    
    @Target(ElementType.METHOD)
    @Retention(RUNTIME)
    @Documented
    public @interface Action {
    
        String name();
    
    }
    package com.example.aop;
    
    import org.springframework.stereotype.Service;
    
    /**
     * Created by liz19 on 2017/1/30.
     */
    @Service
    public class DemoAnnotationService {
    
        @Action(name="注解式拦截的add操作")
        public void add(){
            System.out.println("clas DemoAnnotationService");
        }
    }
    package com.example.aop;
    
    import org.springframework.stereotype.Service;
    
    /**
     * Created by liz19 on 2017/1/30.
     */
    @Service
    public class DemoMethodService {
    
        public  void add(){
    
            System.out.println("class DemoMethodService");
        }
    }
    package com.example.aop;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.aspectj.lang.reflect.MethodSignature;
    import org.springframework.stereotype.Component;
    import java.lang.reflect.Method;
    
    /**
     * Created by liz19 on 2017/1/30.
     */
    
    @Aspect
    @Component
    public class LogAspect {
    
        @Pointcut("@annotation(com.example.aop.Action)")
        public void annotationPointCut(){}
    
        @After("annotationPointCut()")
        public void after(JoinPoint joinPoint){
    
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
    
            Method method = signature.getMethod();
    
            Action action = method.getAnnotation(Action.class);
    
            System.out.println("注解式拦截--------Name: "+action.name());
        }
    
        @Before("execution(* com.example.aop.DemoMethodService.*(..))")
        public void before(JoinPoint joinPoint){
    
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
    
            Method method = signature.getMethod();
    
            System.out.println("方法规则拦截拦截---------"+ method.getName());
    
        }
    
    }
    package com.example;
    
    import com.example.aop.AopConfig;
    import com.example.aop.DemoAnnotationService;
    import com.example.aop.DemoMethodService;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    /**
     * Created by liz19 on 2017/1/30.
     */
    public class AopApp {
    
        public static void main(String[] args){
    
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AopConfig.class);
            DemoAnnotationService demoAnnotationService = context.getBean(DemoAnnotationService.class);
    
            DemoMethodService demoMethodService = context.getBean(DemoMethodService.class);
    
            demoAnnotationService.add();
    
            demoMethodService.add();
    
            context.close();
        }
    }
    package com.example.aop;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    
    /**
     * Created by liz19 on 2017/1/30.
     */
    @Configuration
    @ComponentScan("com.example.aop")
    @EnableAspectJAutoProxy
    public class AopConfig {
    
    }

    1.通过@Aspect注解声明一个切面

    2.通过@Component让此切面成为Spring容器管理的Bean

    3.通过@PointCut注解声明切点

    4.通过@After注解声明一个建言,并用@PointCut定义的切点

    5.通过发射获得注解上的属性,然后做日志记录的相关操作,下面的相同

    6.通过@Before注解声明一个建言,此建言直接使用拦截规则作为参数

    7.通过@EnableAspectJAutoProxy开启对AspectJ支持

  • 相关阅读:
    使用JdbcTemplate访问数据库
    解决为什么每次打开Eclipse新的workspace需要更新nexus-maven-repository-index问题
    java内存设置
    Eclipse如何解决启动慢
    eclipse的包的加减号展开方式
    maven总结5
    maven总结4
    maven总结3
    maven总结2
    maven总结1
  • 原文地址:https://www.cnblogs.com/MarchThree/p/6358576.html
Copyright © 2011-2022 走看看