发表于: 2017-09-05 23:42:18

1 814


【今日完成】

今天在网上找了很多例子,发现五花八门的。看着没一个比较靠谱,就拿它来搭建Redis环境了!

尝试了很多,但是跑不起来。准备明天在GitHub上找个demo试试。



于是重新复习了一下Spring的AOP知识:


 应用切面
DI能够让相互协作的软件组件保持松散耦合,而面向切面编程
(aspect-oriented programming,AOP)允许你把遍布应用各处的功能
分离出来形成可重用的组件。
面向切面编程往往被定义为促使软件系统实现关注点的分离一项技
术。系统由许多不同的组件组成,每一个组件各负责一块特定功能。
除了实现自身核心的功能之外,这些组件还经常承担着额外的职责。
诸如日志、事务管理和安全这样的系统服务经常融入到自身具有核心
业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为它
们会跨越系统的多个组件。
如果将这些关注点分散到多个组件中去,你的代码将会带来双重的复
杂性。
实现系统关注点功能的代码将会重复出现在多个组件中。这意味
着如果你要改变这些关注点的逻辑,必须修改各个模块中的相关
实现。即使你把这些关注点抽象为一个独立的模块,其他模块只
是调用它的方法,但方法的调用还是会重复出现在各个模块中。
组件会因为那些与自身核心业务无关的代码而变得混乱。一个向
地址簿增加地址条目的方法应该只关注如何添加地址,而不应该
关注它是不是安全的或者是否需要支持事务。



如图所示。日志,安全,事物是通用模块,但是又不可能通过继承来实现通用。唯一的解决办法就是使用切面。

否则每一个服务都会调用这三个模块,会像图片里面一样非常繁杂,一团乱麻。


我们可以把切面想象为覆盖在很多组件之上的一个外
壳。应用是由那些实现各自业务功能的模块组成的。借助AOP,可以
使用各种功能层去包裹核心业务层。这些层以声明的方式灵活地应用
到系统中,你的核心应用甚至根本不知道它们的存在。这是一个非常
强大的理念,可以将安全、事务和日志关注点与核心业务逻辑相分
离。



有关AOP的一些术语:


一:通知

在AOP术语中,切面的工作被称为通知。
通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,
通知还解决了何时执行这个工作的问题。它应该应用在某个方法被调
用之前?之后?之前和之后都调用?还是只在方法抛出异常时调用?


通知分为五类:

前置通知(Before):在目标方法被调用之前调用通知功能;
后置通知(After):在目标方法完成之后调用通知,此时不会关
心方法的输出是什么;
返回通知(After-returning):在目标方法成功执行之后调用通
知;
异常通知(After-throwing):在目标方法抛出异常后调用通知;
环绕通知(Around):通知包裹了被通知的方法,在被通知的方
法调用之前和调用之后执行自定义的行为。


二:连接点

连接点是在应用执行过程中能够插入切面的一个点。这个
点可以是调用方法时、抛出异常时、甚至修改一个字段时。切面代码
可以利用这些点插入到应用的正常流程之中,并添加新的行为。


三:切点

如果说通知定义了切面的“什么”和“何时”的话,那么切点就定义
了“何处”。切点的定义会匹配通知所要织入的一个或多个连接点。
我们通常使用明确的类和方法名称,或是利用正则表达式定义所匹配的
类和方法名称来指定这些切点。有些AOP框架允许我们创建动态的切
点,可以根据运行时的决策(比如方法的参数值)来决定是否应用通
知。


四:切面

切面是通知和切点的结合。通知和切点共同定义了切面的全部内容
——它是什么,在何时和何处完成其功能。



那么,如何使用AOP呢?

首先,要使用切面,必须有一个切面,一般来说一个切面就是一个普通的Bean,没什么大的区别。

除了一点:一般在切面类前面要加个注解;@Aspect



可以看到上图就是一个典型的切面。里面有四种方法,每个方法上的注解表示执行时间,并且有个切点表达式,表示在某个方法执行的时候才执行。

来看看切点表达式吧:



当然,如果嫌四个表达式太啰嗦,还可用@Pointcut来表式,剩下的直接引用就行。



以上就是通过注解的方式来声明切面,当然也可以用XML方式,其实用的也不少,但没有注解方面,这里就稍微提一下:

本质上内容差不多,就是换了一个地方而已(从类中换到了XML中)


AOP是面向对象编程的一个强大补充。通过AspectJ,我们现在可以把
之前分散在应用各处的行为放入可重用的模块中。我们显示地声明在
何处如何应用该行为。这有效减少了代码冗余,并让我们的类关注自
身的主要功能。
Spring提供了一个AOP框架,让我们把切面插入到方法执行的周围。
现在我们已经学会如何把通知织入前置、后置和环绕方法的调用中,
以及为处理异常增加自定义的行为。

关于在Spring应用中如何使用切面,我们可以有多种选择。通过使
用@AspectJ注解和简化的配置命名空间,在Spring中装配通知和切
点变得非常简单。
最后,当Spring AOP不能满足需求时,我们必须转向更为强大的
AspectJ。

这里就不描述AspectJ了,我觉得上面知识基本够用了,如果用到了,到时候再说吧。



【明日计划】

跑通Redis,找Demo


【今日收获】

看了很多的Redis例子,五花八门。

复习了AOP切面知识


【任务进度】

延期到后天吧,明天跑通,梳理一下任务六

http://task.ptteng.com/zentao/project-burn-268.html




返回列表 返回列表
评论

    分享到