发表于: 2017-11-18 21:55:18
1 636
今天完成的事情:
1.处理好写两个controller的问题
就是从service的接口写起,这样方法就可以在控制类里面被调用到了。
2.对这个接口通过更换请求进行两种情况的压测
声明:此次项目的数据库在远程服务器上
条件:30线程循环25次
(1)有缓存的情况:
(2)无缓存的情况
结论:可以看出有缓存的比没有缓存的90%Line小一点,但总的来说,其实影响并不是很大。
然后我又测了一下50线程循环50次的情况:
有缓存的90%Line:三次分别为442,453,446
无缓存的90%Line:三次分别为460,471,463
可以看出来,缓存是有作用的,但不够权威。
所以打算用AOP把日志打出来再看看。
3.通过aop打出来信息
(1)aop的代码
这儿写的简单一点,就在控制台统计一下从进方法到处来一共消耗了多长时间,对比一下有无缓存的耗时。
(2)输出结果
1)把切面设置service的实现类下面
2)把切面设置controller类下面
结论就是代码逻辑没有问题,其次时间相差也不大,所以以后若再出现问题,就最后再打正规日志进行输出查看。
明天计划的事情:
测Json接口和用nginx反向代理
遇到的问题:
就是刚开始,切面放到controller类是会有很多报错,或者访问有的接口是不会打出日志。
在给MVC的配置文件里加了自动注入装配注解以后,就好了。应该就是这个原因。
收获:
1.了解Exception和throwable
Java语言要求java程序中(无论是谁写的代码)所有抛出(throw)的异常都必须是从Throwable派生而来。当然,实际的Java编程中,由于JDK平台已经为我们设计好了非常丰富和完整的异常对象分类模型。因此,java程序员一般是不需要再重新定义自己的异常对象。而且即便是需要扩展自定义的异常对象,也往往会从Exception派生而来。所以,对于java程序员而言,它一般只需要在它的顶级函数中catch(Exception ex)就可以捕获出所有的异常对象。 所有异常对象的根基类是 Throwable ,Throwable从Object直接继承而来(这是java系统所强制要求的),并且它实现了 Serializable接口(这为所有的异常对象都能够轻松跨越Java组件系统做好了最充分的物质准备)。从Throwable直接派生出的异常类有Exception和Error 。Exception是java程序员所最熟悉的,它一般代表了真正实际意义上的异常对象的根基类。也即是说, Exception 和从它派生而来的所有异常都是应用程序能够catch到的,并且可以进行异常错误恢复处理的异常类型。而Error则表示Java系统中出现了一个非常严重的异常错误,并且这个错误可能是应用程序所不能恢复的,例如LinkageError ,或 ThreadDeath 等。
2.学习@Component注解
@Component:定义Spring管理Bean
@AspectJ风格的切面可以通过@Compenent注解标识其为Spring管理Bean,而@Aspect注解不能被Spring自动识别并注册为Bean,必须通过@Component注解来完成
3.学习AOP
(1)概念
AOP(Aspect Oriented Programming—— 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
(2)相关定义
1)Joinpoint(连接点): 所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.
2)Pointcut(切入点): 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
3)Advice(通知/增强): 所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
4)Introduction(引介): 引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
5)Target(目标对象): 代理的目标对象
6)Weaving(织入): 是指把增强应用到目标对象来创建新的代理对象的过程. spring采用动态代理织入,而AspectJ采用编译期织入和类装在期织入.
7)Proxy(代理): 一个类被AOP织入增强后,就产生一个结果代理类
8)Aspect(切面): 是切入点和通知(引介)的结合
(3) AspectJ:java社区最完整最完善的AOP框架;
AspectJ支持的5种类型的通知注解:
@Before:前置通知,在方法执行之前执行
@After:后置通知,在方法执行之后执行
@AfterRunning:返回通知,在方法返回结果后执行
@AfterThrowing:异常通知,在方法抛出异常之后执行
@Around:环绕通知,围绕着方法执行
评论