AOP基础讲解

AOP 概述

AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过
预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
AOP 是 OOP 的延续,是软件开发中的一个热点,是 java 开发中的一个重要内
容。利用 AOP 可以对业务逻辑和非业务逻辑进行隔离,从而使得各部分之间的
耦合度降低,提高程序的可重用性,同时提高了开发的效率。
面向切面编程的好处就是: 减少重复,专注业务;
核心原理:
使用动态代理的方式在执行方法前后或者出现异常的时候做加入相关的逻辑.
使用案例:
事务处理:开启事务,关闭事务,出现异常后回滚事务
权限判断:在执行方法前,判断是否具有权限 日志:在执行前进行日志处理

AOP 的基本概念

连接点(
Joinpoint): 类中可以被增强的方法,这个方法就被称为连接点
切入点(pointcut): 类中有很多方法可以被增强,但实际中只有 add 和 update
被增了,那么 add 和 update 方法就被称为切入点(实际实现的连接点)
通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。通
知分为方法执行前通知,方法执行后通知,环绕通知等.
目标(Target): 代理的目标对象(连接点,切入点所在类)
代理(Proxy): 向目标对象应用通知时创建的代理对象

springAOP 实现

对于 AOP 这种编程思想,很多框架都进行了实现。Spring 就是其中之一,
可以完成面向切面编程。
AspectJ 是一个基于 Java 语言的 AOP 框架,它提供了强大的 AOP 功能,且其实
现方式更为简捷,使用更为方便, 而且还支持注解式开发。所以,Spring 又
将 AspectJ 的对于 AOP 的实现也引入到了自己的框架中。
下载 AOP 相关 jar
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>
AspectJ 中常用的通知有五种类型:
前置通知,后置通知,环绕通知,异常通知,返回通知.
@Before 前置通知:方法执行之前
@After 后置通知:方法执行之后,无论是否出现异常
@AfterReturnning 返回通知:方法成功执行之后通知,出现异常不执行
@AfterThrowing 异常通知:抛出异常之后通知
@Around 环绕通知:方法执行前后都有通知
基于注解方式的实现
启动 AspectJ 支持:<aop:aspectj-autoproxy />
定义通知:
@Component
@Aspect
public class AOPDemo {
    @Before("execution(* com.ff.spring.dao.UserDao.*(..))")
    public void saveLog() {
        System.out.println("saveLog");
    }

    @AfterThrowing(value = "execution(*com.ff.spring.dao.UserDao.*(..))", throwing = "e")
    public void afterthrow(Throwable e) {
        System.out.println("afterthrow");
    }

    public void aroundAdvice(ProceedingJoinPoint joinPoint) {
        try {
            //前置通知 
            // Object[] objects = joinPoint.getArgs(); 
            // joinPoint.proceed();
            // 调用我们自己的目标方法 
            // 返回通知 
            // } 
            // catch (Throwable throwable) 
            // { throwable.printStackTrace(); 
            // 异常通知 } 
            // 后置通知 
            // } 
            // }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窦鑫锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值