Spring学习之路——Spring AOP

AOP(面向切片编程)在我第一次接触时就没能特别理解,在最近重新学习spring知识的过程中我也顺便学习了sping aop的思想和具体实现

首先,我们来看看到底什么是 AOP。

AOP是Spring框架面向切面的编程思想,AOP采用一种称为*“横切”*的技术,将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置中

Spring框架的AOP机制可以让开发者把业务流程中的通用功能抽取出来,单独编写功能代码。在业务流程执行过程中,Spring框架会根据业务流程要求,自动把独立编写的功能代码切入到流程的合适位置。

例如,在一个业务系统中,用户登录是基础功能,凡是涉及到用户的业务流程都要求用户进行系统登录。如果把用户登录功能代码写入到每个业务流程中,会造成代码冗余,维护也非常麻烦,当需要修改用户登录功能时,就需要修改每个业务流程的用户登录代码,这种处理方式显然是不可取的。比较好的做法是把用户登录功能抽取出来,形成独立的模块,当业务流程需要用户登录时,系统自动把登录功能切入到业务流程中。下图是用户登录功能切入到业务流程示意图。

流程

再来看看我写的一个具体实例

//定义一个计算器类,里面有两数相除方法
public class MathCalculator {
    public int div(int i , int j) {
        return i / j;
    }
}

现在我们要做的是,以这个除法方法为切入点,定义一个除法日志类,没当此方法被调用,异常,返回时,就打印一些响应信息,那么这个日志类就自然作为了切面

1.创建日志类

我们先来看看在切面中有哪些常用注解

@Before    				//标注在切面方法前,表示在方法运行前执行
@After					//表示在方法运行后执行
@AfterReturning			//当方法正常返回时执行
@AfterThrowing			//当方法异常时执行

但是光有这些注解还不够,它不知道你的切点方法在哪里,所以在加入上述注解时需要给定参数,参数为切点方法的名字,格式为

"修饰符+返回值+方法全限定名+(方法返回类型列表)"

如我的除法方法需要这样写:

@Before("public int com.ZJW.aop.MathCalculator.div(int , int)")

但是如果每一个注解后面都写一遍这么长的参数,就会造成麻烦。有一个注解@Pointcut就为我们解决了这个问题

//注意需要加"execution"
@Pointcut("execution(public int com.ZJW.aop.MathCalculator.div(int , int))")
    public void pointCut() {
	}

这样我们以后就可以这样写了

@Before("pointCut()")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值