|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。AOP正在成为软件开辟的下一个圣杯。利用AOP,你能够将处置aspect的代码注进主程序,一般主程序的次要目标其实不在于处置这些aspect。AOP能够避免代码凌乱。为了了解AOP怎样做到这点,思索一下记日记的事情。日记自己不太多是你开辟的主程序的次要义务。假如能将“不成见的”、通用的日记代码注进主程序中,那该多好啊。AOP能够匡助你做到。Springframework是很有出路的AOP手艺。作为一种非侵犯性的,轻型的AOPframework,你无需利用预编译器或其他的元标签,即可以在Java程序中利用它。这意味着开辟团队里只需一人要凑合AOPframework,其别人仍是象平常一样编程。AOP是良多直觉难以了解的术语的本源。侥幸的是,你只需了解三个观点,就能够编写AOP模块。这三个观点是:advice,pointcut和advisor。advice是你想向其余程序外部分歧的中央注进的代码。pointcut界说了必要注进advice的地位,一般是某个特定的类的一个public办法。advisor是pointcut和advice的拆卸器,是将advice注进主程序中预界说地位的代码。既然我们晓得了必要利用advisor向次要代码中注进“不成见的”advice,让我们完成一个SpringAOP的例子。在这个例子中,我们将完成一个beforeadvice,这意味着advice的代码在被挪用的public办法入手下手前被实行。以下是这个beforeadvice的完成代码:代码:packagecom.company.springaop.test;importjava.lang.reflect.Method;importorg.springframework.aop.MethodBeforeAdvice;publicclassTestBeforeAdviceimplementsMethodBeforeAdvice{publicvoidbefore(Methodm,Object[]args,Objecttarget)throwsThrowable{System.out.println("Helloworld!(by"+this.getClass().getName()+")");}}接口MethodBeforeAdvice只要一个办法before必要完成,它界说了advice的完成。before办法共用三个参数,它们供应了相称丰厚的信息。参数Methodm是advice入手下手后实行的办法。办法称号能够用作判别是不是实行代码的前提。Object[]args是传给被挪用的public办法的参数数组。当必要记日记时,参数args和被实行办法的称号,都长短常有效的信息。你也能够改动传给m的参数,但要当心利用这个功效;编写最后主程序的程序员其实不晓得主程序大概会和传进参数的产生抵触。Objecttarget是实行办法m对象的援用。鄙人面的BeanImpl类中,每一个public办法挪用前,城市实行advice:代码:packagecom.company.springaop.test;publicclassBeanImplimplementsBean{publicvoidtheMethod(){System.out.println(this.getClass().getName()+"."+newException().getStackTrace()[0].getMethodName()+"()"+"saysHELLO!");}}类BeanImpl完成了上面的接口Bean:代码:packagecom.company.springaop.test;publicinterfaceBean{publicvoidtheMethod();}固然不是必需利用接口,但面向接口而不是面向完成编程是优秀的编程理论,Spring也勉励如许做。pointcut和advice经由过程设置文件来完成,因而,接上去你只需编写主办法的Java代码:代码:packagecom.company.springaop.test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.FileSystemXmlApplicationContext;publicclassMain{publicstaticvoidmain(String[]args){//ReadtheconfigurationfileApplicationContextctx=newFileSystemXmlApplicationContext("springconfig.xml");//InstantiateanobjectBeanx=(Bean)ctx.getBean("bean");//Executethepublicmethodofthebean(thetest)x.theMethod();}}我们从读进和处置设置文件入手下手,接上去即刻要创立它。这个设置文件将作为粘合程序分歧部分的“胶水”。读进和处置设置文件后,我们会失掉一个创立工场ctx。任何一个Spring办理的对象都必需经由过程这个工场来创立。对象经由过程工场创立后即可一般利用。仅仅用设置文件即可把程序的每部分组装起来。代码:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"><beans><!--CONFIG--><beanid="bean"class="org.springframework.aop.framework.ProxyFactoryBean"><propertyname="proxyInterfaces"><value>com.company.springaop.test.Bean</value></property><propertyname="target"><reflocal="beanTarget"/></property><propertyname="interceptorNames"><list><value>theAdvisor</value></list></property></bean><!--CLASS--><beanid="beanTarget"class="com.company.springaop.test.BeanImpl"/><!--ADVISOR--><!--Note:Anadvisorassemblespointcutandadvice--><beanid="theAdvisor"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"><propertyname="advice"><reflocal="theBeforeAdvice"/></property><propertyname="pattern"><value>com.company.springaop.test.Bean.theMethod</value></property></bean><!--ADVICE--><beanid="theBeforeAdvice"class="com.company.springaop.test.TestBeforeAdvice"/></beans>四个bean界说的序次其实不主要。我们如今有了一个advice,一个包括了正则表达式pointcut的advisor,一个主程序类和一个设置好的接口,经由过程工场ctx,这个接口前往本人自己完成的一个援用。BeanImpl和TestBeforeAdvice都是间接设置。我们用一个独一的ID创立一个bean元素,并指定了一个完成类。这就是全体的事情。advisor经由过程Springframework供应的一个RegexMethodPointcutAdvisor类来完成。我们用advisor的一个属性来指定它所需的advice-bean。第二个属性则用正则表达式界说了pointcut,确保优秀的功能和易读性。最初设置的是bean,它能够经由过程一个工场来创立。bean的界说看起来比实践上要庞大。bean是ProxyFactoryBean的一个完成,它是Springframework的一部分。这个bean的举动经由过程一下的三个属性来界说:属性proxyInterface界说了接口类。属性target指向当地设置的一个bean,这个bean前往一个接口的完成。属性interceptorNames是独一同意界说一个值列表的属性。这个列表包括一切必要在beanTarget上实行的advisor。注重,advisor列表的序次长短常主要的。Spring工具固然你能够手工修正Ant构建剧本,但利用SpringUI(译注:SpringUI如今是Springframework的一部分,并更名为spring-ide),利用SpringAOP变得很复杂,只需点点鼠标便可。你能够把SpringUI安装成Eclipse的一个plug-in。然后,你只需在你的project上右击鼠标,并选择“addSpringProjectNature”。在project属性中,你能够在“SpringProject”下增加Spring设置文件。在编译前把上面的类库到场project:aopalliance.jar,commons-logging.jar,jakarta-oro-2.0.7.jar和spring.jar。运转程序时你会看到上面的信息:...(logginginformation)Helloworld!(bycom.company.springaop.test.TestBeforeAdvice)com.company.springaop.test.BeanImpl.theMethod()saysHELLO!长处和弱点Spring比起其他的framework更有上风,由于除AOP之外,它供应了更多其余功效。作为一个轻型framework,它在J2EE分歧的部分都能够发扬感化。因而,即便不想利用SpringAOP,你大概仍是想利用Spring。另外一个长处是,Spring其实不请求开辟团队一切的职员城市用它。进修Spring应当从Springreference的第一页入手下手。读了本文后,你应当能够更好地舆解Springreference了。Spring独一的弱点是缺少更多的文档,但它的mailinglist是个很好的增补,并且会不休地呈现更多的文档。
用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。 |
|