栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

代理模式/AOP

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

代理模式/AOP

JDK动态代理特点

类型名称:class com.sun.proxy.$Proxy9

要求: 要求被代理者,必须是接口或者是实现类

JDK代理是java原生提供的API无需导包

JDK动态代理在框架的源码中经常使用

CGlib动态代理

 CGlib特点说明

历史原因:JDK动态代理要求必须"有接口",但是某些类它没有接口,则无法使用JDK代理生成代理对象,所以为了填补知识的空缺,则引入cglib代理

 问题说明: cglib动态代理 要求有无接口都可以创建代理对象 问题?

如何保证和被代理者"相同"?

答案:(特点)要求cglib动态代理继承被代理者 代理对象是被代理者的子类;

动态代理的作用?

说明:一般我们将业务层中的耦合性高的代码,采用动态代理的方式进行解耦 ,使用程序更加具有扩展性(业务逻辑的解耦)

说明2:Spring专门针对动态代理的规则,封装了一套API起名AOP 

Spring AOP

AOP介绍

总结:Spring中的AOP利用代理对象在不修改源码的条件下对方法进行扩展

AOP中专业术语(难点)

1).连接点: 用户可以被扩展的方法
2).切入点: 方法当满足切入点表达式时,就会执行通知方法
3).通知: 扩展方法的具体实现
4).切面: 将通知应用到切入点的过程

AOP入门案例

jar包导入

AOP形象化的比喻

说明:AOP是一种抽象的一种概念,看不见/摸不着

面向切面编程  :将扩展的方法,在切面中进行定义封装,不需要修改源码 ,对方法进行扩展,并且切面可以有多个!!!

关于切入点表达式解析  bean标签写法

@Pointcut(“bean(userServiceImpl)”) 只匹配ID为userServiceImpl的对象

within表达式

@Pointcut(“within(com.jt.demo2.service.*)”) 匹配xx.xx.service下的所有对象

execution表达式

按照注解进行拦截 

自定义注解

通知方法  关于通知方法解析
*   1.前置通知  在目标方法执行之前执行
*   2.后置通过  在目标方法执行之后执行
*   3.异常通知  在目标方法执行之后抛出异常时执行
*   4.最终通知  都要执行的通知
说明: 上述的四大通知一般用于记录程序的运行状态,只做记录
*   5.环绕通知  在目标方法执行前后都要执行的通知

  前置通知

最终通知  

说明: 不管方法

环绕通知

Spring中的通知总结

第一类:记录程序的运行状态

 1,前置通知

2,后置通知 记录目标方法的返回值

3,异常通知  记录目标方法执行之后,抛出异常的信息

4,最终通知 记录程序最后的状态

第二类:

5,环绕通知  控制目标方法是否执行,环绕通知是未来使用最多的,功能最为强大的

Spring中AOP案例

需求1:需要对方法的执行时间,进行监视?

通知的选择:首选环绕通知

需求2:利用AOP可以实现缓存控制

通知类型:环绕通知

业务思路:

 1用户直接查询缓存

 如果缓存中没有数据 表示第一次查询 ,让目标方法执行

 如果缓存中有数据  表示第N次查询,目标方法不执行 从缓存中获取数据即可

需求3:利用AOP控制事务

通知类型:环绕通知

需求4:利用AOP控制方法的权限!!!

通知类型: 环绕通知

业务思路:

   1.在AOP环绕通知中,判断当前的用户是否有该权限!!!!

   2.有权限 :可以执行目标方法,获取数据

   3.没有权限 : 不能执行目标方法. :通知用户 没有权限!!!!

关于AOP现状说明:一般工作中很少直接编辑AOP底层代码,绝大部分的业务逻辑都是使用的 高级API ,不需要从底层写起

Spring中AOP的执行顺序说明

说明:如果有多个环绕通知.其中

Srping总结

知识总结:

Spring的作用:spring可以整合其他的第三方框架!从架构的角度,实现了代码的松耦合!

 1.Spring-IOC/DI: IOC控制反转/数据结构Map集合/xml文件写法/注解写法/

DI:依赖注入 类型注入/名称注入/一般接口都是单实现.

2.Spring-AOP  在不修改源码的条件下对方法进行扩展!!! 

动态代理 :  JDK动态/Cglib动态代理 method.invoke()

切面=切入点表达式+通知方法  

AOP中因为切面较多,每个切面都完成特定的功能,所以一般不会研究顺序, @order注解 可以控制顺序

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号