其他分享
首页 > 其他分享> > springAop切面操作

springAop切面操作

作者:互联网

简介:

切面操作使用的是动态代理,什么是代理?比如你去饭店吃饭,你只管点餐吃饭,而做菜上菜的操作都是饭店员工代理完成的。(只管主要功能而不管公共功能)

那什么是切面操作?以日志记录为例,你吃饭时,每当你吃了十口饭我就给你记录一次,这并不影响你吃饭(主要功能),又完成了日志记录功能,我就相当于那个代理对象,而你就是被代理,代理的操作是每吃十口饭记录+1。

那么如果不是代理呢?每当你吃了十口饭,你就需要停下自己记录一次,这样你的主要功能就受到了影响。

 

在maven中加入依赖:

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>

创建指定的切面类并标注:

@Aspect:声明为切面

@Component:注册为Bean交给spring管理

切面类:

package cn.tulingxueyuan.aspect;

import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;
import java.util.Arrays;

@Aspect
@Component
public class LogUtil {


    // 前置通知
    @Before("execution(* cn.tulingxueyuan.service..*.*(..))")
    public static void before(){
        System.out.println("方法前");
    }

    // 后置通知
    @After("execution(* cn.tulingxueyuan.service..*.*(..))")
    public static void after(){
        System.out.println("方法后");
    }

    // 后置异常通知
    @AfterThrowing("execution(* cn.tulingxueyuan.service..*.*(..))")
    public static void afterException(){
        System.out.println("方法异常");
    }

    // 后置返回通知
    @AfterReturning("execution(* cn.tulingxueyuan.service..*.*(..))")
    public static void afterEnd(){
        System.out.println("方法返回");

    }
}

 xml配置:

     <!--扫描包:扫描类中所有注解,不扫描注解不是生效-->
    <context:component-scan base-package="cn.tulingxueyuan" >
    </context:component-scan>

    <!--因为我们使用的是注解方式的AOP,所以要开启注解AOP功能-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

 

 

标签:cn,..,代理,tulingxueyuan,切面,springAop,操作,public
来源: https://www.cnblogs.com/0099-ymsml/p/16332836.html