代理模式
1.概念:
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,通俗的来讲代理模式就是我们生活中常见的中介
2.作用:
开闭原则,增加功能(在原有功能的基础上增加一些功能),控制某个对象的引用
3.原则:
1.必须与目标对象实现相同的接口 2.依赖于目标对象而创建
4.方式
1.静态代理:工作量增大 ,需要实现相同的接口,并实现其中的方法
2.动态代理:再程序执行过程中,有程序动态去创建
spring
spring 是集众多设计模式于一身的项目管理框架,并致力于javaee轻量级解决方案
spring 核心思想之一 springAop 面向切面编程 springIOC 控制反转
aop 核心三个概念
- advice (通知)
- 前置通知 实现MethodBeforeAdvice接口
目标方法运行之前执行的功能 - 后置通知 实现AfterReturningAdvice接口
目标方法运行之后执行的功能 - 异常通知 实现ThrowsAdvice 接口
目标方法发生异常执行的功能 - 环绕通知 实现MethodInterceptor接口
监控整个方法的运行(之前,之后,异常)发起的通知
-
pointCut(切入点)
为哪些方法添加通知对象
在xml文件中配置切入点
1.创建切入点
方法级别的切入点表达式(细粒度的切入点表达式)
1.语法
* (包名 返回值 类名 方法名) 所有
execution(* com.baizhi….(…))
返回值 : * com.baizhi : 包名 … : 路径 * : 类名 * : 方法名 … : 参数列表
常用: execution(* com.baizhi.BeforeAdvice..(…)) 在这个包下的所有类
类级别的切入点表达式(粗粒度的切入点表达式)
within(com.baizhi.BeforeAdvice.*)
在这个包下的所有类创建切入点 id : 唯一标识(名字) expression : 切入点表达式 <aop:config> <aop:pointcut id="pt" expression="execution(* com.baizhi.service.UserServiceImpl.*(..)"></aop:pointcut> </aop:comfig> 2.组装切面 组装切面 advice-ref : 该切面关联哪个通知 pointcut-ref : 该切面关联哪个切入点 <aop:advisor advice-ref="baeforeProxy" pointcut-ref="pt" ></aop:advisor>
-
Aspect (切面)
通知(advice)+切入点(pointCut)
spring中Aop生成动态代理的方式
1.jdk 基于接口生成动态代理 spring中默认jdk生成动态代理 默认false
cglib 基于实现类构建代理对象
手动设置 <aop:config proxy-target-class=“false/true”></aop:config> -
target : 目标对象 proxy : 代理对象