10Spring的AOP

SpringAOP

AOP是一种思想,意思是面向切面的编程/面向方面的编程。

Aspect(方面、方向)     Oriented(导向、定向的)    Programming(程序设计、规划)

 

使用AOP的目的就是将业务逻辑同业务功能关系不大的代码分离,降低耦合。

 

AOP和OOP的异同

OOP——面向对象编程

面向对象编程很好的 解决了软件系统中角色划分的问题,但是在日志、事务处理、权限管理等方面,使用OOP封装对象行为会产生大量的重复代码。

AOP——面向切面编程

面向切面编程可以使应用程序分为核心关注点和横切关注点,从而降低代码的耦合。

 

AOP和OOP是互补而不是对立的。

 

 

SPring的AOP借助于java的动态代理机制。

 

代理

最简单的代理就是手动去写一个代理类,将被代理的对象作为一个成员传入该对象中,之后再调用被代理对象方法前后插入需要拓展的内容——这就是静态代理。

但是这种方法有一个最大的缺点就是,我们需要为每一个被代理对象都编写一个代理类。

简化一些的方法就是我们可以面向接口编程,声明一个接口去代理,但是这样做又需要被代理类实现同一个接口。

 

Java提供了一种更灵活地方法——动态代理。

Java提供了InvocationHandlerProxy  ——动态代理。

Spring就是基于java的动态代理机制实现的。

 

SpringAOP有三个关键字分别是:

Pointcut——切入点

Advice——通知

Advisor——顾问/提供意见者

三者的关系是:

pointcut定义切入点的条件

Advice是具体的处理逻辑

Advisor则负责链接pointcutadvice

 

Spring主要提供了三种切入点实现:

静态切入点、动态切入点和自定义切入点

 

自定义切入点目前还不成熟,用的比较多的是静态切入点。

静态切入点和动态切入点的主要区别在于:

静态切入点只限于给定的方法和目标类,不用考虑方法的参数,spring只在第一次计算静态切入点的位置,之后就会将其换成——RegexpMethodPointcut

动态切入点不仅限于给定的方法和类,可以指定方法的参数,所以动态切入点不能缓存,因此使用动态切入点有很大的性能损耗。

 

Spring的通知ADVICE

Spring提供了五种advice类型:

Interception around:在切入点前后执行。

Before    在切入点之前执行,实现Before通知的类需要实现接口                              ethodBeforAdvice

 

After returning通知:   在切入点执行之后通知。

Thorw通知:在切入点抛出异常时通知,实现Throw通知的类需要实现ThrowsAdvice接口。

Introduction通知:  在切入点调用完毕后通知,实现Introduction通知的类需要实现IntroductionAdviceintroductionInterceptor接口。

Spring的配置器Advisor

 

Advisorpointcutadvice的配置器,他负责将advice注入到pointcut位置。

 

ProxyFactoryBean

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值