【Spring】—— 如何使用AOP(面向切面编程)?

本文详细介绍了如何在Spring框架中使用AOP(面向切面编程),包括导入坐标、创建连接点方法、制作共性功能(通知)、定义切入点、绑定通知与切入点、让通知受Spring管理以及配置类的设置。
摘要由CSDN通过智能技术生成

目录

引言

AOP使用

1)导入坐标(pom.xml)

2)制作连接点方法(原始操作、接口与实现类)

3)制作共性功能(通知类与通知)

4)定义切入点

5)绑定切入点与通知关系

6)定义通知类受Spring容器管理,并定义当前类为切面类

7)配置类


引言

AOP(面向切面编程):一种编程范式,指导开发者如何组织程序结构。

作用:在不改变原始设计的基础上进行功能增强。

如以下代码:如何再不改变此类的基础上,使后三个方法达到与save方法同样的效果?

public class BookDaoImpl implements BookDao {
    public void save(){
        Long startTime = System.currentTimeMillis();
        for(int i = 0;i < 10000;i++)
            System.out.println("book dao save...");
        Long endTime = System.currentTimeMillis();
        Long totalTime = endTime-startTime;
        System.out.println(totalTime + "ms");
    }

    public void update(){
        System.out.println("book dao update...");
    }
    public void delete(){
        System.out.println("book dao delete...");
    }
    public void select(){
        System.out.println("book dao select...");
    }

}

AOP使用

1)导入坐标(pom.xml)

pom.xml文件加入以下坐标,注意加入后刷新maven。

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.9</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>
    </dependencies>

2)制作连接点方法(原始操作、接口与实现类)

@Repository
public class BookDaoImpl implements BookDao {
    public void save(){
        System.out.println(System.currentTimeMillis());
        System.out.println("book dao save...");
    }

    public void update(){
        System.out.println("book dao update...");
    }

}

3)制作共性功能(通知类与通知)

public class MyAdvice {
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

4)定义切入点

切入点是匹配连接点的式子

public class MyAdvice {
    @Pointcut("execution(void com.spring.dao.BookDao.update())")
    private void pt(){}

}

5)绑定切入点与通知关系

public class MyAdvice {
    @Pointcut("execution(void com.spring.dao.BookDao.update())")
    private void pt(){}

    @Before("pt()")
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

6)定义通知类受Spring容器管理,并定义当前类为切面类

加入@Component和@Aspect

切面是描述通知与切入点的对应关系

@Component
@Aspect
public class MyAdvice {
    @Pointcut("execution(void com.spring.dao.BookDao.update())")
    private void pt(){}

    @Before("pt()")
    public void method(){
        System.out.println(System.currentTimeMillis());
    }
}

7)配置类

@EnableAspectJAutoProxy开启Spring对AOP注解驱动支持

@Configuration
@ComponentScan("com.spring")
@EnableAspectJAutoProxy
public class SpringConfig {
}
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

四月天行健

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

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

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

打赏作者

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

抵扣说明:

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

余额充值