- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
spring--day02总结
Hibernate day02 总结
AOP切面编程
什么是AOP
AOP Aspect Oriented Programing 面向切面编程
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码
经典应用:性能监视、事务管理、安全检查、缓存)
Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码
AspectJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入
AOP专业术语
Joinpoint 连接点,所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法。
理解:可以被动态代理拦截目标类的方法
Pointcut 切入点,所谓切入点是指我们要对那些Joinpoint进行拦截。
理解:被拦截的连接点
Advice 通知,所谓通知是指拦截到Joinpoint之后所要做的事情。
理解:对切入点增强的内容
Introduction 引介,所谓引介是一种特殊的通知,在不修改类代码的前提下,引介可以在运行时动态添加一些方法或字段
理解:给目标添加新的方法和字段
Target 目标,代理的目标对象
Weaving 织入,指把增强代码应用到目标上,生成代理对象的过程
Proxy 代理,生成的代理对象
Aspect 切面,是切入点和通知的总和
AOP基础:代理模式
什么是代理模式
23种java常用设计模式之一。代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理的目的:进行功能增强(方法增强)
代理的模型结构
一个是真正的你要访问的对象(目标类),一个是代理对象
真正对象与代理对象实现同一个接口,先访问代理类再访问真正要访问的对象。
代理分类
静态代理
使用设计模式,完整目标代码的增强
动态代理
在运行时,对目标代码进行增强,需要借口
字节码增强(CGLIB)
在运行时,对目标代码进行增强,有类即可
CGLIB(Code Generation Library)是一个开源项目!
是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。
字节码增强(JAVAssist)
Javassist是一个开源的分析、编辑和创建Java字节码的类库。它已加入了开放源代码JBoss应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。
代理演示
目标对象
接口:
package cn.itcast.a_proxy.a_init;
public interface Target {
public void sing();
} 实现类:
package cn.itcast.a_proxy.a_init;
public class TargetImpl implements Target {
@Override
public void sing() {
System.out.println(刘德华唱歌);
}
}package cn.itcast.a_proxy.b_wrapper;
import cn.itcast.a_proxy.a_init.Target;
/**
* class A implements B{
* private B b;
* public A(B b){
* this.b = b;
* }
* ...method
* }
* 1、自定义类A需要实现接口B,实现的接口是需要增强类具有的接口
* 2、自定义类A需要一个可以接收接口B的实现类的构造方法
* 3、自定义类A需要将接口B的具体实现类缓存
* 4、实现需要增强的方法 close
* 5、其他不需要增强的方法,直接调用接口B的具体实现类的方法
*/
public class TargetWrapper implements Target {
private Target target; //用户缓存目标对象实例
public TargetWrapper(Target target){
this.target = target;
}
@Override
public void sing() {
System.out.println(先给钱); //增强内容
this.target.sing(); //执行目标方法
}
}package cn.itcast.a_proxy.b_wrap
您可能关注的文档
最近下载
- (2025秋)人教版二年级数学上册全册教案(新教材).pdf
- 第二单元大单元教学设计 高一语文必修上册.docx VIP
- 2025年燃气安全生产管理人员模拟考试题库及答案.docx VIP
- 高中音乐 人音版 必修《音乐鉴赏》《舞动心弦——舞蹈音乐》 第四课时.pptx VIP
- 住院医师临床思维培养ppt模板.pptx VIP
- 反渗透纳滤组合工艺高盐废水深度处理及零排放预浓缩.pdf VIP
- 超声成像系统数字扫描变换器(参考).pptx VIP
- JTG3441-2024 公路工程无机结合料稳定材料试验规程.pdf VIP
- 腹腔镜下卵巢囊肿剥除术配合.pptx VIP
- 2026届高三语文一轮复习教学计划.docx
文档评论(0)