AOP_基本概念

分散关注
   将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,

   只要修改这个行为就可以。

AOP概述
AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。

AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延

续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

AOP具体实现
AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点(如Java),目前AOP具体实现有以下几个项目:
     AspectJ (TM): 创建于Xerox PARC. 有近十年历史,技术成熟。缺点:过于复杂;破坏封装;需要专门的Java编译器。
    动态AOP:使用JDK的动态代理API或字节码Bytecode处理技术。

连接点(JoinPoint)

 指那些被拦截到的点,在spring中,这些点指的是方法,因为spring只支持方法类型的连接点。

   基本每个方法的前、后(两者都有也行),或抛出异常时都可以是连接点

通知(Advice)
 指拦截到joinpoint之后所要做的事情,分为 前置通知、后置通知、异常通知(例外通知和最终通知)、环绕通知

   例如:

public Object intercept(Object proxy, Method method, Object[] args,
	MethodProxy methodProxy) throws Throwable {//环绕通知(整个方法)
	PersonServiceImp personServiceImp=(PersonServiceImp)this.targetObject;
	Object result=null;
	if(personServiceImp.getUser()!=null){
	//前置通知
		try{
			result=methodProxy.invoke(this.targetObject, args);
			//后置通知
		}catch(Exception e){
			//例外通知
		}finally{
			//最终通知
		}
	}
	return result;
}

切入点(Pointcut)

 上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知,

   你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。

切面(Aspect)

   切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。

   通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。

引入(introduction)

 允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗

目标(target)

 引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。

代理(proxy)

   实现整套aop机制

织入(weaving)

   把切面应用到目标对象来创建新的代理对象的过程。有3种方式,spring采用的是运行时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值