10Spring的AOP

来源:互联网 发布:淘宝账户名怎么修改 编辑:程序博客网 时间:2024/05/23 12:24

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

 

0 0