spring aop思想

    spring提供了对对象进行aop编程的支持。

AOP思想

    横向重复、纵向抽取。

1.Filter:解决乱码放到filter中,filter放到所有servlet上面;

2.动态代理中,管理事务代码,每次使用事务都要编写事务代码,开启事务关闭事务什么的,InvocationHandler,使用动态代理把事务管理加入所有servlet操作中;

Proxy.newProxyInstance(ClassLoader,Interface[] arr,InvocationHandler handler)

    InvocationHandler里面写的东西就是需要加入到被代理对象中的代码。

通过动态代理把事务管理加入到servlet当中,不需要在servlet中再写。

3.拦截器,很多个Action,参数赋值Action,拦截器可以完成把参数赋值到Action中,这样Action就不用每个都做参数赋值了,比如登陆校验的时候。

解释AOP

    面向切面的编程,是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。

ASPECT

    AOP核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切功能。比如,一个日志模块可以被称作日志的AOP切面,根据需求的不同,一个应用程序可以有若干切面。

AOP实现原理

    spring能够为容器中管理的对象生成动态代理对象。以前我们要使用动态代理,我们需要自己调用下面这个方法生成代理对象

Proxy.newProxyInstance(ClassLoader,Interface[] arr,InvocationHandler handler)

 spring能帮我们生成代理对象。只需要用配置文件或者注解配一下。

为什么叫spring aop?

    在生成代理的时候,为每一个service都生成代理,这样通用行为只需要写一遍。

spring实现AOP的原理:

1.动态代理:被代理对象必须要实现接口才能产生代理对象。如果没有接口将不能使用动态代理技术。

2.cglib代理:第三方代理技术,cglib代理技术,可以对任何类生成代理,代理的原理是对目标对象进行继承代理。如果目标对象被final修饰,那么该类无法对cglib代理。

    有接口优先使用1,没有就用2。

AOP名词学习

Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只 支持方法类型的连接点.

Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义.

Advice(通知/增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知.通知分为前置通知,后置 通知,异常通知,最终通知,环绕通知(切面要完成的功能)

Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类 动态地添加一些方法或 Field.

Target(目标对象):代理的目标对象 Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程.  spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装在期织入

Proxy(代理):一个类被 AOP 织入增强后,就产生一个结果代理类

Aspect(切面): 是切入点和通知(引介)的结合 

猜你喜欢

转载自blog.csdn.net/hellodake/article/details/81943736