Aspect切面的使用實例


一、導入切面庫

以maven工程為例,除了springmvc基礎的庫,需要導入切面庫,本例aspectj為例。

    <properties>
        <aspectj.version>1.9.3</aspectj.version>
    </properties>
  ......
    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${aspectj.version}</version>
    </dependency>

二、編寫基礎植入的類,以打印功能為例。

不得不歌頌一下注解和Spring,引入和配置大大的簡化了。

@Aspect
@Slf4j
@Component
public class LogAspectUtil {
    @Pointcut("execution(public * com.sanro.controller..*.*(..))")//配置需要植入打印的包路徑
    public void controllerLog() {
    }

    @Before("controllerLog()")
    public void logBefore(JoinPoint joinPoint) {
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
        log.info("full url = " + request.getRequestURL().toString());
        log.info("http method = " + request.getMethod());
        log.info("class method = " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
    }

    @After("controllerLog()")
    public void logAfter(JoinPoint joinPoint) {
        log.info("controller execute finished... ");
    }

}

三、坐享其成

現在com.sanro.controller目錄下的所有controller類都能
1. 在請求進入的時候自動打印請求的url,method等想要的信息和處理動作;
2. 在請求處理結束的時候都能打印時間或者增加想要的處理動作。


免責聲明!

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



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