Spring之AOP

本文介绍了AOP的基本概念,如连接点、切入点、通知和切面。接着讲解了AspectJ框架在Spring中的应用,包括注解和XML配置方式。还详细展示了如何定义切入点表达式,以及创建AOP代理的步骤。最后,通过一个User类的例子,演示了在Spring中使用注解实现方法增强的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仅作为学习笔记

1. AOP基本概念

连接点:类中可以被增强的方法
切入点:实际被增强的方法
通知:增强的逻辑
切面:把通知注入到切入点的过程(一种动作)

2. AspectJ

AspectJ是一种独立于Spring的框架,实现AOP需要Spring结合AspectJ
实现方式:注解(重点)、xml配置文件
使用前需要引入依赖

3. 切入点表达式

表示对哪个类的哪个方法进行增强
execution([权限修饰符][返回类型][类全路径]方法名)
其中,权限修饰符可省略
例如,对于com.cumt.Book类中,含有add、update方法

//只对add方法进行增强
execution(*com.cumt.Book.add(..))
//对Book类中所有方法增强
execution(*com.cumt.Book.*(..))
//对cumt包下所有类的所有方法增强
execution(*com.cumt.*.*(..))

4.AOP步骤

1、创建一个类(User)
2、创建一个增强类,在该类中声明一些增强的逻辑/通知(UserProxy)
3、在Spring配置文件中开启注解扫描,在增强类中添加注解@Aspect
4、在Spring配置文件中开启代理对象的生成(命名空间Aop)
5、在增强类中,作为通知的方法上添加通知类型的注解AOP切入点表达式

//第一步:创建User类
@Component(value = "user")
public class User {
    public int add(int a, int b){
        return a+b;
    };
    public int update(int id){
        System.out.println(id);
        return id;
    }
}

//第二步:创建User的增强类,在类中声明增强方法
public class UserProxy {

    public void beforeadd(){
        System.out.println("这是add方法之前的增强逻辑");
    }
    public void afteradd(){
        System.out.println("add方法之后的增强逻辑");
    }
}
//第三步:在配置文件中,开启注解扫描
//第四步:开启代理对象生成
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd
                           http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd">

    <aop:aspectj-autoproxy proxy-target-class="true"> </aop:aspectj-autoproxy>
    <context:component-scan base-package="com.cumt.hx">

    </context:component-scan>

//在增强类中的通知上配置切入点表达式

@Component
@Aspect
public class UserProxy {
    @Before(value = "execution(* com.cumt.hx.aoptest.User.add(..))")
    public void beforeadd(){
        System.out.println("这是add方法之前的增强逻辑");
    }
    @After(value = "execution(* com.cumt.hx.aoptest.User.update(..)))")
    public void afteradd(){
        System.out.println("add方法之后的增强逻辑");
    }
}

//测试
@Test
public void test(){
    ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    User user = (User) context.getBean("user");
    System.out.println(user.add(2,5));
}

注意点:增强类也需要基于注解来创建对象,否则不会之前通知(在UserProxy类中Component注解也需要,不加不会执行通知方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值