随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。
posts - 398,comments - 0,views - 13万

简介:

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

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

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

1
2
3
@Aspect:声明为切面
 
@Component:注册为Bean交给spring管理,进入Ioc容器才能切入Ioc容器中的Bean

切面类:

复制代码
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>
复制代码

 

 

posted on   时间完全不够用啊  阅读(108)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示