仓酷云

标题: JAVA网页设计基于AOP的日记调试仓酷云 [打印本页]

作者: 灵魂腐蚀    时间: 2015-1-18 11:22
标题: JAVA网页设计基于AOP的日记调试仓酷云
多谢指点,其实我对.net网页编程和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。断点是我们一样平常开辟最为罕见和高效的调试手腕,比拟较输出日记它赐与更多的形态信息和天真的察看角度,但断点调试是有条件和范围的.
企业使用开辟中,我们经常会碰到没法断点调试的困境,比方:
这迫使我们不能不回到日记调试的老门路下去.
PrintvsLogging

复杂点的话,我们用
  1. System.out.println("debuginfomation");
复制代码
就是由于过于复杂,当必要更多信息(如线程,工夫等),或是界说输入形式和情势就必要编写更多代码,因而我们有了Log4j.
为何要基于AOP

Log4j挺好用的,只是与System.out.print一样,在代码中到处可见,但却没有营业代价.
更使人头痛的是,并不是每次我们都有充足的履历告知本人应当在那里增加这些语句,乃至于调试中不休的由于调正它们的在代码中的地位,而重复编译–打包–公布体系.这类膂力活,太没艺术感了,!
换而言之,我们会但愿:
AOP完整能够匡助我们做到上述两点.
这完整不是甚么奇怪概念,这在任何先容AOP文章中,城市提到Logging是其最典范的使用场景.
以是这儿将基于Guice,会商怎样完成一个非侵进式的,且能无需从头编译便可调正Logging地位的复杂示例.
一个基于Guice的示例

我已经用过一个叫Log4E的Eclipse插件,它可依据我们事后的设置,主动的为我们在编写的代码中拔出logging的语句,如办法挪用的入口和出口:
  1. 01publicintsum(inta,intb){02if(logger.isDebugEnabled()){03logger.debug("sum-start:ais"+a+",bis"+b);04}0506intresult=a+b;0708if(logger.isDebugEnabled()){09logger.debug("sum-end:returnis"+result);10}11}
复制代码
从上例不难发明,我们在调试过程当中,常常会经由过程一个办法的进进或加入的形态(参数,前往值或非常)来剖析成绩出在甚么中央.那末,借助MethodInterceptor我们能够如许做:
Logging拦阻器
  1. 01publicclassLoggingInterceptorimplementsMethodInterceptor{0203@Override04publicObjectinvoke(MethodInvocationinvocation)throwsThrowable{05try{06Objectresult=invocation.proceed();0708//logging??,??????09log(invocation.getMethod(),invocation.getArguments(),result);1011returnresult;12}catch(Throwablethrowable){1314//logging??,?????15error(invocation.getMethod(),invocation.getArguments(),throwable);1617throwthrowable;18}19}20}
复制代码
接上去,我们必要设置这个拦阻器,并向Guice声明它.
  1. 01publicclassLoggingModuleextendsAbstractModule{0203@Override04publicvoidconfigure(){05bindInterceptor(Matchers.any(),Matchers.any(),newLoggingInterceptor());06}0708}0910publicclassMain{11publicstaticvoidmain(String[]args){12Injectorinjector=Guice.createInjector(newBusinessModule(),newLoggingModule());1314}15}
复制代码
很复杂,不是吗?如许我们的营业模块的代码完整不必编写输入日记的代码,只必要在创立Injector的时分到场LoggingModule就能够了.
等等,仿佛忘了往完成怎样设置日记输入的地位.好吧,这个实在很复杂:
设置Logging地位
  1. 01bindInterceptor(Matchers.any(),Matchers.any(),newLoggingInterceptor());
复制代码
bindInterceptor办法的第一个参数界说了拦阻器将婚配一切类,第二个参数界说了拦阻器将婚配一个类一切办法.那末,我们要做的仅仅是经由过程内部参数调剂这两个参数就能够啦.这儿就演示一个用正则表达式婚配要Logging的办法的例子:

再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
作者: 第二个灵魂    时间: 2015-1-19 16:30
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者: 精灵巫婆    时间: 2015-1-22 11:40
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 若天明    时间: 2015-1-29 11:25
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者: 海妖    时间: 2015-2-4 03:01
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者: 灵魂腐蚀    时间: 2015-2-9 12:11
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者: 愤怒的大鸟    时间: 2015-2-13 15:43
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者: 透明    时间: 2015-3-3 23:12
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者: 小女巫    时间: 2015-3-4 04:58
Java是一种计算机编程语言,拥有跨平台、面向对java
作者: admin    时间: 2015-3-6 21:20
Java是一种计算机编程语言,拥有跨平台、面向对java
作者: 若相依    时间: 2015-3-13 09:20
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者: 谁可相欹    时间: 2015-3-20 18:31
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2