当前位置: 首页 > wzjs >正文

奢侈品 网站建设方案网站点击量软件

奢侈品 网站建设方案,网站点击量软件,购物优惠券网站怎么做,wordpress 不发送邮件在这之前我们已经介绍了AOP的基本功能和概念,那么当AOP集成到spring则会发生改变。Spring AOP 中的Joinpoint:之前提高了很多Joinpoint的类型,但是在spring中则只会有方法级别的Joinpoint,像构造方法,字段的调用都没适…

在这之前我们已经介绍了AOP的基本功能和概念,那么当AOP集成到spring则会发生改变。

Spring AOP 中的Joinpoint:

之前提高了很多Joinpoint的类型,但是在spring中则只会有方法级别的Joinpoint,像构造方法,字段的调用都没适配。原因是Spring框架一直追求轻量级和高效,而仅仅采用方法级的Joinpoint即可满足百分之八十的需求。同时如果采用类中的属性级别的Joinpoint则会破坏对象的封装。如果需求非常特殊超过了拿百分之八十的需求那么不妨可以使用AspectJ的方式。

Spring AOP 中的Pointcut:

Spring中以接口定义Pointcut作为其最顶层的抽象接口,该接口定义了两个方法用来帮助捕获系统中相应的Joinpoint

两个方法的ClassFilter和MethodMatcher分别是用来匹配将执行织入操作的对象以及相应的方法。

也就是说ClassFilter是对于类型对象的匹配而MethodMatcher则是对于方法级别的匹配,

MethodMatcher的复杂度相比于ClassFilter要高。原因是ClassFilter仅仅只需要匹配类型即可而MethodMatcher则可能需要匹配方法名称或者方法名称+参数

因此对于MethodMatcher则有多个方法进行匹配

有两个matches的方法,而这两个方法的分界线就是isRuntime方法。在对具体的方法进行拦截的时候,可以忽略每次方法执行的时候调用者传入的参数,也可以每次都检查这些方法调用参数,以强化拦截条件,都是与isRuntime的返回值有关如果返回值为false则会触发第一个matches方法这种属于不会考虑具体方法的参数,而如果返回结果为true则会调用第二个matches方法表示采用参数的匹配

将这两个MethodMatcher类型分为StaticMethodMatcher和DynamicMethodMatcher类型。StaticMethodMatcher类型则是无参数检查,这种无需参数检查的类型可以缓存在框架内部,同时性能比较出色,对于DynamicMethodMatcher类型是参数检查,因此不会进行缓存操作,同时性能上相比StaticMethodMatcher则是损耗很大。

常见的PointCut

下面我们来介绍几个常见的PointCut

NameMatchMethodPointcut:

这个是最简单的Pointcut实现,属于StaticMethodMatcher的子类,可以根据自身指定的一组方法名称与Joinpoint处的方法的名称进行匹配

JdkRegexpMethodPointcut和Perl5RegexpMethodPointcut

StaticMethodMatcher的子类有一个专门基于正则表达式的实现分支,而JdkRegexpMethodPointcut和Perl5RegexpMethodPointcut则是不同类型的正则表达式的具体实现。

AnnotationMatchingPointcut

根据目标对象中是否存在指定类型的注解来匹配Joinpoint,要使用该类型的Pointcut首先需要声明相应的注解。

CompossablePointcut

提供逻辑运算功能,而ComposablePointcut就是Spring AOP提供的可以进行Pointcut逻辑运算的Pointcut实现。它可以实现Pointcut之间的并以及交运算。

ControlFlowPointcut

ControlFlowPointcut则是最特殊的Pointcut类型,在理解和使用上都需要我们多付出点脑细胞,ControlFlowPointcut匹配程序的调用流程,不是对某个方法执行所在的Joinpoint处的单一特征进行匹配。通过ControlFlowPointcut我们可以实现指定只有当某个类的方法在被执行的类对象调用的时候才会对方法进行拦截处理

Spring AOP中的Advice

Advice实现了将被织入到Pointcut规定的Joinpoint处的横切逻辑。在spring中,advice按照其自身实例能否在目标对象类的所有实例中共享这一标准,可以划分为两大类,即per-class类型的advice和per-instance类型的advice。

per-class类型的Advice

per-class类型的Advice是指该类型的实例可以在目标对象类的所有实例之间进行共享,这种类型的Advice只是提供方法拦截的功能,不会为目标对象类保存任何状态或者添加新的特性。

那么per-class有着以下几种类型

Before advice

实现的横切逻辑将在相应的Joinpoint之前执行,在Before advice执行完成之后,程序执行流程将从Joinpoint处继续执行,所以Before Advice通常不会打断程序执行的流程,但是如果有必要,也可以通过抛出相应异常的形式中断程序流程

ThrowsAdvice

throwsAdvice通常用于对系统重特定的异常情况的监控,以统一的方式对所发生的异常进行处理,一旦捕获到异常,需要马上以某种方式通知系统的监控或者运营人员

AfterReturningAdvice

通过spring的AfterReturningAdvice,我们可以访问当前joinpoint的方法返回值,方法,方法参数以及所在的目标对象

Around Advice

Spring AOP没有提供AfterAdvice,使得我们没有一个合适的advice类型来承载类似于系统资源清除之类的横切逻辑。Spring AOP的AfterReturningAdvice不能更改Joinpoint所在方法的返回值,使得我们在方法正常返回后无法对其进行更多的敢于。有了Around Advice则可以解决这个问题

per-instance类型的Advice

在Spring AOP当中只有一个类型的per-instance型Advice就是Introduction

Introduction

Introduction允许你在不修改目标类代码的情况下,为其动态添加新的接口和实现。这相当于在运行时为目标对象 “混入” 额外的行为,使其具备原本没有的功能。

// 定义新接口
public interface Monitorable {void setMonitorActive(boolean active);boolean isMonitorActive();
}// 实现接口和 IntroductionInterceptor
public class MonitorInterceptor implements MethodInterceptor, Monitorable {private boolean monitorActive = false;@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {if (monitorActive && invocation.getMethod().getName().startsWith("get")) {System.out.println("Monitoring: " + invocation.getMethod().getName());}return invocation.proceed();}@Overridepublic void setMonitorActive(boolean active) {this.monitorActive = active;}@Overridepublic boolean isMonitorActive() {return monitorActive;}
}// 创建 IntroductionAdvisor
public class MonitorAdvisor extends DefaultIntroductionAdvisor {public MonitorAdvisor() {super(new MonitorInterceptor(), Monitorable.class);}
}
增强类型作用是否改变类结构
Before/After在方法前后添加行为
Around环绕方法执行,完全控制调用过程
Introduction为目标对象添加新接口和实现是(运行时)
http://www.dtcms.com/wzjs/519610.html

相关文章:

  • 郑州阿里巴巴网站建设站长权重
  • 网站建设开发工具google seo 优化招聘
  • 菜鸟如何建网站免费二级域名申请网站
  • 有没有人与动物做的电影网站做网站哪个平台好
  • 网站开发建设企业西安seo网络优化公司
  • wordpress 发表时间网站性能优化
  • 有什么做公众号封面图的网站近三天时政热点
  • 深圳网站建设 公司元湖南官网网站推广软件
  • 动态网站开发教材济南网络优化哪家专业
  • wordpress用户中心模板昆明seo建站
  • 网站能不能自己做广州营销网站建设靠谱
  • 北京做兼职从哪个网站搜索引擎有哪几个网站
  • 北白象镇做公司网站哪里有品牌的宣传及推广
  • 网页设计网站开发需要什么怎样在平台上发布信息推广
  • 网易云音乐网站建设项目规划书软件开发培训机构
  • 哪些彩票网站可做代理赚钱搜狗seo培训
  • 做内衣批发的网站关键词搜索站长工具
  • 什么软件做网站好关键词完整版
  • 做网站用虚拟主机好不好广东seo网站推广
  • 衡水网站建设电话知名网络营销推广
  • 黑龙江省建设协会网站百度广告开户
  • 合肥网站建设公司线上营销有哪些
  • 简单做网站百度一下手机版
  • wordpress优秀模板百度网站排名关键词整站优化
  • 图书馆网站建设天津网站排名提升
  • 中企中立做的网站好吗培训学校怎么招生
  • 企业网站建设内容提升关键词排名有哪些方法
  • 济南网站建设哪里好网络营销十大成功案例
  • 建设厅网站上传身份证河南网站关键词优化
  • 哪些网站适合用自适应百度权重怎么查询