JAVA网页编程之在nanowar中引进AOP
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。经由过程nanocontainer的nanowar和其struts插件完善的完成了IoC形式的通明,但没法在尺度的nanowar中引进nanoaop不能不说是一种遗憾。看了一下nanocontainer的代码,决意本人下手给nanowar增加aop的撑持。要在组件和实例中撑持AOP,起首要引进interceptorchains。能够思索在XML界说中引进<aspectinterceptor=InterceptorNamepointcuts=Filter/>标签。这个<aspect>标签与组件或实例的<parameter>标签在统一级别上。个中interceptor指出拦阻器的称号。拦阻器的完成能够经由过程尺度组件体例在统一个设置文件中举行注册。pointcuts是拦阻办法的过滤表达式(perl5的正则表达式,和nanoaop预界说几个过滤划定规矩)。在nanowar中完成这个<aspect>标签,必要修正ScopedCotainerComposer,XMLContainerBuilder,ContainerRecorder,ServletContainerListener,DefaultLifecycleContainerBuider类。因为拦阻器没法在IoC容器初始化的过程当中失掉实例。因而,还必要引进一个新的通用拦阻器类(InterceptorDelegate),作为真实的拦阻器实例和需被拦阻的组件的挪用桥梁。因为对源代码修改量较年夜,干脆就在本来类的后面加上Aspectable前缀引进新的类,但除AOP部分,其他的坚持稳定。ScopedCotainerComposer=>AspectableScopedContainerComposer.javapublicAspectableScopedContainerComposer()throwsClassNotFoundException{this(newDynaopAspectablePicoContainerFactory().createContainer());}XMLContainerBuilder=>AspectableXMLContainerBuilder.javaprotectedPicoContainercreateContainerFromScript(....AspectablePicoContainerFactorycontainerFactory=newDynaopAspectablePicoContainerFactory();AspectablePicoContainerchildContainer=containerFactory.createContainer(componentAdapterFactory,parentContainer);cuts=childContainer.getPointcutsFactory();....}privatevoidregisterComponentImplementation(NanoContainercontainer,Elementelement)throwsClassNotFoundException,MalformedURLException{......Mapinterceptors=createInterceptors(element);......if(interceptors!=null){registerComponentInterceptor(container,clazz,interceptors);}}.......privatevoidregisterComponentInterceptor(NanoContainercontainer,Classcomponent,Stringpointcuts,StringinterceptorKey){if(notSet(pointcuts)){pointcuts=ALL_METHODS;}if(container.getPico()instanceofAspectablePicoContainer){AspectablePicoContaineraspectContainer=(AspectablePicoContainer)container.getPico();aspectContainer.registerInterceptor(cuts.instancesOf(component),getMethodPointcut(pointcuts),newInterceptorDelegate(aspectContainer,interceptorKey));}}.......privateMapcreateInterceptors(Elementelement){MapinterceptorMap=newHashMap();NodeListchildren=element.getChildNodes();for(inti=0;i<children.getLength();i++){if(children.item(i)instanceofElement){ElementchildElement=(Element)children.item(i);if(ASPECT.equals(childElement.getNodeName())){Stringinterceptor=childElement.getAttribute(INTERCEPTOR);if(notSet(interceptor))thrownewNanoContainerMarkupException(""+KEY+"attributenotspecifiedfor"+element.getNodeName());Stringpointcuts=childElement.getAttribute(POINTCUTS);interceptorMap.put(interceptor,pointcuts);}}}if(interceptorMap.isEmpty())returnnull;elsereturninterceptorMap;}privateMethodPointcutgetMethodPointcut(Stringpointcuts){if(OBJECT_METHODS.equals(pointcuts))returncuts.objectMethods();if(IS_METHODS.equals(pointcuts))returncuts.isMethods();if(ALL_METHODS.equals(pointcuts))returncuts.allMethods();if(GET_METHODS.equals(pointcuts))returncuts.getMethods();if(SET_METHODS.equals(pointcuts))returncuts.setMethods();returncuts.signature(pointcuts);}ContainerRecorder=>AspectableContainerRecorder.javapublicMutablePicoContainergetContainerProxy(){if(this.containerinstanceofAspectablePicoContainer)return(MutablePicoContainer)Proxy.newProxyInstance(getClass().getClassLoader(),newClass[]{AspectablePicoContainer.class},invocationRecorder);elsereturn(MutablePicoContainer)Proxy.newProxyInstance(getClass().getClassLoader(),newClass[]{MutablePicoContainer.class},invocationRecorder);}DefaultLifecycleContainerBuider=>AspectableLifecycleContainerBuider.javaprotectedPicoContainercreateContainer(PicoContainerparentContainer,ObjectassemblyScope){AspectablePicoContainerFactorycontainerFactory=newDynaopAspectablePicoContainerFactory();returncontainerFactory.createContainer(parentContainer);}ServletContainerListener=>AspectableServletContainerListener.javaprivateContainerBuildercreateBuilder(ServletContextcontext)throwsClassNotFoundException{......if(initParameter.equals(CONTAINER_COMPOSER)){ContainerComposercontainerComposer=createContainerComposer(context);returnnewAspectableLifecycleContainerBuilder(containerComposer);}InterceptorDelegate.javaimportorg.aopalliance.intercept.MethodInterceptor;importorg.aopalliance.intercept.MethodInvocation;importorg.picocontainer.PicoContainer;importdynaop.Interceptor;importdynaop.Invocation;publicclassInterceptorDelegateimplementsInterceptor,MethodInterceptor{privatePicoContainerpico;privateObjectkey;publicInterceptorDelegate(PicoContainerpico,Objectkey){this.pico=pico;this.key=key;}/*(non-Javadoc)*@seedynaop.Interceptor#intercept(dynaop.Invocation)*/publicObjectintercept(Invocationinvocation)throwsThrowable{return((Interceptor)pico.getComponentInstance(key)).intercept(invocation);}/*(non-Javadoc)*@seeorg.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)*/publicObjectinvoke(MethodInvocationinvocation)throwsThrowable{return((MethodInterceptor)pico.getComponentInstance(key)).invoke(invocation);}}市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 Java是一种计算机编程语言,拥有跨平台、面向对java 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
页:
[1]