AOP的理解

1. 什么是Aop

面向切面编程,不懂没关系,看图一下就明白了。
往小了看是这样子的:
方法上
这里写图片描述
往大了看是这样的:
业务上
这里写图片描述

2. Aop编程涉及到的名词概念

通知(advice):切入的功能:日志,事物之类
连接点(joinpoint):能够切入通知的地方,方法的前前后后咯
切点(cutpoint):增加了通知,或者要切入通知的连接点,相当于连接点的筛选
切面:切点和通知的结合叫切面
引入:引入允许我们向现有的类中添加方法或属性

3. 实现原理

代理模式
接口:

public interface IAnimal {
    void say();
}

目标对象类:

public class dog implements IAnimal {

    @Override
    public void say() {
        System.out.println("旺旺");
    }

}

代理对象类:

public class dogproxy implements IAnimal {

    private dog dg;

    public dogproxy(dog dog) {
        dg = dog;
    }

    @Override
    public void say() {
        // before say
        System.out.println("before");
        dg.say();
        System.out.println("after");
    }

}

PS:最后我们在调用的时候,调用的是代理对象的say()方法。
动态代理:
实现原理差不多,就是利用sun提供的一个API而已,这里就不细说

4. Spring Boot 中使用切面(Aop)编程实例

4.1 引入依赖包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    <version>1.4.1.RELEASE</version>
</dependency>

4.2 创建切面类(切入的地点,切入的方法)

@Aspect
public class MyAspect {
    @Before("execution(* com.seven.service.*.get*(..))")
    public void adviceBefore() {
        System.out.println("aop方法前");
    }

    @After("execution(* com.seven.service.*.get*(..))")
    public void adviceAfter() {
        System.out.println("aop方法后");
    }
}

特别说明:
通知:adviceBefore()和 adviceAfter()
切点:execution(* com.seven.service..get(..))表示servcie包下面的get*方法,意为着将会在这些方法上添加新功能。(也就意味着容器会创建该对象的代理类,调用的时候会调用代理类的get*方法)
4.3 配置

@Configuration
@EnableAspectJAutoProxy
public class AopConfig {
    @Bean
    public MyAspect myAspect() {
        return new MyAspect();
    }
}

4.4 配置导入main函数(让容器知道你自定义了一个aop配置)

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@ComponentScan("com.seven")
@Import({ MybatisConfig.class, AopConfig.class })
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

4.5 运行即可

Spring AOP(面向切面编程)是Spring框架中的一个重要模块,用于实现横切关注点的模块化。它通过在程序运行期间动态地将代码织入到应用程序的特定位置,从而实现对横切关注点的处理。 在Spring AOP中,通过定义切面(Aspect)和连接点(Join Point)来实现对横切关注点的处理。切面定义了在何处以及如何进行横切关注点的处理,而连接点则表示在应用程序中可以插入切面的位置。 Spring AOP的核心概念是切面、连接点、通知(Advice)、切点(Pointcut)和引入(Introduction): 1. 切面(Aspect):切面是一个模块化的单元,它包含了一组通知和切点。通知定义了在何时、何地以及如何进行横切关注点的处理,而切点定义了在应用程序中哪些连接点可以插入切面。 2. 连接点(Join Point):连接点是在应用程序中可以插入切面的位置。例如,方法调用、方法执行、异常抛出等都可以作为连接点。 3. 通知(Advice):通知定义了在连接点上执行的操作。常见的通知类型有前置通知(Before)、后置通知(After)、返回通知(After Returning)和异常通知(After Throwing)等。 4. 切点(Pointcut):切点是一个表达式,用于定义哪些连接点可以插入切面。通过切点表达式,可以选择性地将切面应用于特定的连接点。 5. 引入(Introduction):引入允许在现有的类中添加新的方法和属性。 Spring AOP的优点在于它能够将横切关注点与业务逻辑分离,提高了代码的可维护性和可重用性。同时,它也提供了一种非侵入式的方式来实现横切关注点的处理,不需要修改原有的代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值