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支持

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM