Spring框架AOP原理及实现

本文详细介绍了Spring框架中的AOP思想,包括AOP的定义、功能、核心概念,如连接点、切入点、增强和切面。阐述了Pointcut语法,并列举了两种实现方式:XML编程和注解实现。在XML实现中,讲述了从创建Service层和Dao层,到配置AOP的全过程。而在注解实现中,讲解了如何添加注解解析器以及如何在事务类中应用注解进行增强。
摘要由CSDN通过智能技术生成

1、AOP思想

1.1 什么是AOP

Aspect oritention programming(面向切面编程),把一个个的横切关注点(这些零散存在于业务方法中的功能代码,我们称之为横切面关注点)放到某个模块中去,称之为切面。那么每一个的切面都能影响业务的某一种功能,切面的目的就是功能增强,如日志切面就是一个横切关注点,应用中许多方法需要做日志记录的只需要插入日志的切面即可。这种面向切面编程的思想就是AOP思想了。
在这里插入图片描述
在这里插入图片描述

1.2 AOP的功能

AOP能够将那些与Service业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

1.3 AOP当中的概念

Joinpoint:连接点,被拦截到需要被增强的方法。where:去哪里做增强
Pointcut:切入点,哪些包中的哪些类中的哪些方法,可认为是连接点的集合。where:去哪些地方做增强
Advice:增强,当拦截到Joinpoint之后,在方法执行的什么时机(when)做什么样(what)的增强。
Aspect:切面,Pointcut+Advice,去哪些地方+在什么时候+做什么增强
Weaving:织入,把Advice加到Target上之后,创建出Proxy对象的过程。
注意:
Spring的AOP使用动态代理实现:
如果一个类实现了接口,那么spring就使用JDK的动态代理完成AOP;
如果一个类没有实现接口,那么spring就是用cglib完成AOP;

1.4 Pointcut语法:

切入点一般指业务类

  1. AspectJ切入点语法如下:
    execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)
  2. 翻译成中文:
    execution(<访问修饰符>? <返回类型> <声明类型>? <方法名>(<参数>) <异常>?)
  3. 举例:public static Class java.lang.Class.forName(String className)throws ClassNotFoundException
  4. 通配符:
    *:匹配任何部分,只能表示一个单词
    … 可用于全限定名中和方法参数中,分别表示子包和0到N个参数
    在这里插入图片描述

1.4 AOP实现方式

(1)xml编程实现
(2)注解实现

2、xml编程实现

在这里插入图片描述

(1)创建Service层和Dao层

定义好业务层和dao代码

public class UserServiceImpl implements IUserService {
    @Setter
    private IUserDao dao;

    @Override
    public void save() {
        dao.save();
    }

    @Override
    public void update() {
        dao.update();
    }
}

(2)创建事务类

获取增强函数
JoinPoint :提供访问当前被增强方法的真实对象、代理对象、方法参数等数据。
ProceedingJoinPoint:JinPoint子类,只用于环绕增强中,可以处理被增强方法

public class BusManager {

    public void begin(JoinPoint jp){
        System.out.println("开启事务...");
        /*JoinPoint  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值