发表于: 2017-12-10 21:42:44
0 656
一.今日完成
1.因为其他组员把SVN 库里的部分文件误删,三个模块的代码测试web调用service全部出现难以解决的异常报错,所以重新把公司框架生成的代码整合进项目里,并且重新测试跑通;其中启动server时候,出现ContributionResolveException,提示找不到spring beanfactory配置文件,后来检查发现在articleServier.composite中,有一处配置文件路径在修改相关文件名后未随之调整,如下
<component name="AcademyLiverComponent">
<implementation.spring location="META-INF/applicationContext-server.xml" />
</component>
2.下午给电脑加装了一根4G内存条,配合原有的SSD,再也不用担心内存使用率达到90%以上后,电脑运行迟缓的沉疴顽疾.然后把接口文档里前后台请求参数与返回参数做了微调,把一些有遗漏的字段加入返回参数里.
3.本周里,有数次小课堂讲到了Spring AOP,花了半天时间把这个知识点梳理一遍
(1)常用术语
1)切面(Aspect)
切面是一个关注点的模块化,如事务管理就是一个在JavaEE企业中应用最常见的界面。在企业应用编程中,首先需要通过分析,抽取出通用的功能,即“切面”。
事务、日志、安全性的框架、权限都是切面
2)连接点(Joinpoint)
连接点是执行程序过程中的特定的点。Spring框架只支持方法作为连接点,如方法调用之前、方法调用后、或者发生异常时等。
3)通知(Advice)
通知就是切面的具体实现。通知将在切面的某个特定的连接点上执行动作,Spring中执行的动作往往就是调用某一个类的具体方法。例如:在保存订单的模块中,进行日志管理(一个切面),具体是在保存订单的方法执行之前(连接点)执行写日志(通知)的功能。其中,日志管理是很多模块中通用的功能,因此这就是一个切面,而具体是在保存订单之前执行日志保存,那么保存订单前这个点就是连接点,实现日志保存功能的类就是通知。
就是切面中的方法。
4)切入点(Pointcut)
切入点是连接点的集合,通知将在满足一个切入点表达式的所有连接点上运行。
举例:
在拦截器中,有一系列判断性的内容
if(method.equals("savePerson")||method.equals("updatePerson") ||method.equals("deletePerson")){ ... }
满足了上面三个方法才能开启事务,这些判断条件就为切入点
5)引入(Introduction)
引入的意思是在一个类中加入新的属性或者方法。
6)目标对象(Target Object)
被一个或多个切面所通知的对象成为目标对象。
7)AOP代理(AOP Proxy)
AOP代理是AOP框架所生成的对象,该对象是目标对象的代理对象。代理对象能够在目标对象的基础上,在相应的连接点上调用通知。
8)织入(Weaving)
把切面连接到其他的应用程序之上,创建一个被通知的对象的过程,被称为织入。
(2)AOP中的各种通知
1)前置通知
在目标方法执行之前执行
通知中有一个参数JoinPoint,可以获取目标方法的一些信息
2)后置通知
在目标方法执行之后执行
可以获取目标方法的返回值
如果目标方法遇到异常,将不执行
3)异常通知
获取目标方法抛出的异常信息
4)最终通知:相当于代码中的finally
5)环绕通知:
能控制目标方法的执行,如果做权限控制,可以在这里进行判断。
(3)SpringAOP的过程
1)根据xml文件或者注解中配置的拦截信息,生成相应的代理对象,这个代理对象包含了对应的拦截器。
2)执行所拦截的方法时,就是调用代理对象的执行逻辑,完成各种拦截。
(4)代理实现机制
1)JDK动态代理:
具体实现原理:
a、通过实现InvocationHandlet接口创建自己的调用处理器
b、通过为Proxy类指定ClassLoader对象和一组interface来创建动态代理
c、通过反射机制获取动态代理类的构造函数,其唯一参数类型就是调用处理器接口类型
d、通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数参入
JDK动态代理是面向接口的代理模式,如果被代理目标没有接口那么Spring也无能为力,
Spring通过java的反射机制生产被代理接口的新的匿名实现类,重写了其中AOP的增强方法。
2)CGLib动态代理
CGLib是一个强大、高性能的Code生产类库,可以实现运行期动态扩展java类,Spring在运行期间通过
CGlib继承要被动态代理的类,重写父类的方法,实现AOP面向切面编程呢。
二.明日计划
1.把禅道上的任务拆解细分优化,明确接下来一周内的工作完成目标;
2.花两个小时把Springle AOP的代码实践学习整理一遍
3.准备小课堂,整理JSON的使用方法
三.遇到问题
暂无.
四.收获
以上.
评论