Spring-Boot:拦截器注解范例

Posted 告别的时代

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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支持

 

以上是关于Spring-Boot:拦截器注解范例的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot 拦截器不拦截

Spring/Spring-Boot 学习2 入门知识

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

spring-boot添加自定义拦截器

spring-boot主要注解

spring-boot 注解集合