`
wj_126mail
  • 浏览: 130171 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WEB开发需要搞明白的几个技术原理

阅读更多
1.拦截器
     拦截器在在流行的开源框架中很常见,依赖的技术就是Java的动态代理。
     模型分为以下模块:
     (1)业务组件:是被代理和被拦截的对象。
     (2)代理处理器:实现了InvocationHandler接口的一个对象
     (3)代理对象:Proxy对象。
     (4)拦截器:普通的JavaBean,在调用业务方法的之前或者之后会自动拦截并执行自己的一些方法。
     (5)客户端:执行业务处理的入口。
  
     可以说,拦截器技术是java动态代理技术的具体应用。

     spring中的拦截器,是和IOC技术相结合的产物,通过IOC技术向代理处理器对象中注入目标对象和拦截器。并且spring中定义了拦截行为,祖先接口为org.aopalliance.aop.Advice,该接口只是标识接口,应用中可直接实现BeforeAdvice ,ThrowsAdvice,MethodInterceptor ,AfterReturningAdvice ,IntroductionInterceptor 等子接口


2.监听器




3过滤器


4.面向切面编程(AOP)
    AOP是什么?AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是  这种目标的一种实现。
    AOP有些特有的概念,如:advisor、advice和pointcut等等,使用或配置起来有点绕,让人感觉有些距离感,其实它的实现就是一组标准的设计模式的组合使用:Factory、Proxy、Chain of Responsibility,只要搞清楚这几个设计模式,读AOP的源码是比较容易的。
   AOP应用范围:AOP技术通常用于事务、日志、权限、缓存、异常处理等功能中,
   AOP有必要吗?AOP技术可以降低程序的耦合程度,提高代码的可维护性。
   AOP具体实现:AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点(如Java)。

   目前AOP具体实现有以下几个项目:
   (1)AspectJ (TM): 创建于Xerox PARC. 有近十年历史,成熟;缺点:过于复杂;破坏封装;需要专门的Java编译器。
   (2)动态AOP:使用JDK的动态代理API或字节码Bytecode处理技术。基于动态代理API的具体项目有:JBoss 4.0 JBoss 4.0服务器。nanning 这是以中国南宁命名的一个项目,搞不清楚为什么和中国相关?是中国人发起的?JdonFramework Jdon自己的IoC AOP框架 粗粒度AOP。
   (3)基于字节码的项目有:aspectwerkz、spring。

    AOP 帮助我们解决了新的问题没有?
  AOP 并没有帮助我们解决任何新的问题,它只是提供了一种更好的办法,能够用更少的工作量来解决现有的一些问题,并且使得系统更加健壮,可维护性更好。同时,它让我们在进行系统架构和模块设计的时候多了新的选择和新的思路。

  AOP 和 OOP 到底是什么关系
  很多人在初次接触 AOP 的时候可能会说,AOP 能做到的,一个定义良好的 OOP 的接口也一样能够做到,我想这个观点是值得商榷的。AOP和定义良好的 OOP 的接口可以说都是用来解决并且实现需求中的横切问题的方法。但是对于 OOP 中的接口来说,它仍然需要我们在相应的模块中去调用该接口中相关的方法,这是 OOP 所无法避免的,并且一旦接口不得不进行修改的时候,所有事情会变得一团糟;AOP 则不会这样,你只需要修改相应的 Aspect,再重新编织(weave)即可。 当然,AOP 也绝对不会代替 OOP。核心的需求仍然会由 OOP 来加以实现,而 AOP 将会和 OOP 整合起来,以此之长,补彼之短。

     实现AOP的技术,主要分为两大类:
     一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
     二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。然而殊途同归,实现AOP的技术特性却是相同的,分别为:
     1、join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。
     2、point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。
     3、advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。
     4、aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。
    5、introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。
    上述的技术特性组成了基本的AOP技术,大多数AOP工具均实现了这些技术。它们也可以是研究AOP技术的基本术语。

5.控制反转(IOC)

6.动态代理
     在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。
其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。
     Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,如下,HelloWorld接口定义的业务方法,HelloWorldImpl是HelloWorld接口的实现,HelloWorldHandler是InvocationHandler接口实现。代码如下:
HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
                            hw.getClass().getClassLoader(),
                            hw.getClass().getInterfaces(),
                            handler);
              proxy.sayHelloWorld();

    http://www.iteye.com/topic/683613
分享到:
评论
1 楼 wj_126mail 2011-04-21  
java动态代理 是 代理模式 的一种具体的实现方式。

拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用。正如上面 Struts2的Reference中讲述的,Struts2的Interceptor,其拦截的对象是Action代码,可以定义在Action代码之前或者之后执行拦截器的代码。

struts,webwork中的action都是用拦截器的模式来处理的。

AOP也可以说是一种设计模式,他是通过拦截器技术实现的。因为拦截器技术就是运用代理模式的思想来实现的,所以可以说AOP也是运用代理模式的思想来实现的。

相关推荐

    C-Web-Server源码 经典的C语言web服务器

    在C-Web-Server源码中,我们可以看到以下几个关键部分: 1. **网络通信模块**:Web服务器需要监听特定端口,等待客户端的连接。C-Web-Server使用socket API进行网络编程,包括socket创建、bind、listen和accept等...

    仿web浏览器的源代码程序

    一个典型的Web浏览器包括以下几个关键组件: 1. **用户界面(UI)**:这是用户与浏览器交互的部分,包括地址栏、前进/后退按钮、书签等。 2. **浏览器引擎**:负责管理用户界面和渲染引擎之间的交互,处理用户的...

    java web 进销存管理系统

    总的来说,这个Java Web进销存管理系统集成了现代Web开发技术和数据库管理,为企业提供了全面、便捷的库存和销售管理解决方案。通过深入理解和实践,开发者不仅可以提升技术能力,还能更好地理解企业运营的流程,为...

    一个.NET开发的OA系统

    在这个名为"MyOffice"的OA系统项目中,我们可以预见到以下几个关键的技术点: 1. **数据库设计与交互**:OA系统通常需要处理大量数据,因此数据库设计是关键。.NET框架下的ADO.NET组件提供了与各种数据库(如SQL ...

    XFire 实现web service入门实例源码

    在提供的源码中,可能包括以下几个关键部分: 1. **服务接口**:定义Web服务的公共操作,通常以Java接口的形式存在。例如: ```java public interface HelloWorldService { String sayHello(String name); } ``` 2...

    JSP网站开发典型模块源码

    通过研究这些源码,开发者可以学习到如何在实际项目中运用JSP技术,了解最佳实践,同时也能提升对Web开发的整体理解。对于初学者来说,这是一个极好的学习资源,而对于有经验的开发者,它可以帮助复盘和优化现有项目...

    新手自己写的一个小网站

    标题 "新手自己写的一个小网站" 暗示这是一个初学者创建的个人网站项目,可能是为了实践编程技能或作为学习Web开发的起点。这个小项目可能涵盖了基础的HTML、CSS、JavaScript以及PHP等Web开发技术。 描述中提到 ...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    核心技术课程 自己动手写Web服务器(Socket、多线程)、ashx模式Web开发、ViewState、Cookie、Session、Http协议、Web开发基本原则、XSS漏洞防范、Request对象、Response对象、Server对象、虚拟路径、HttpHandler...

    juddi-0.9rc4-src.tar.gz_UDDI_java service_juddi_juddi-0.9rc4_web

    在juddi-0.9rc4源码中,我们可以看到以下几个关键模块: 1. **UDDI API实现**:这是juddi的核心部分,它实现了UDDI规范定义的操作,如发布服务、查询服务等。这部分代码主要处理与UDDI数据模型相关的操作,包括服务...

    scwcd.rar_scwcd

    【标题】"scwcd.rar_scwcd"指的是SCWCD相关的学习资源,SCWCD是Sun Certified Web Component Developer的缩写,这是Oracle(原Sun Microsystems)提供的一个Java Web开发的专业认证,主要针对Servlet和JSP技术。这个...

    mytomcat.zip

    在“mytomcat.zip”中,我们可以看到一个简化版的Tomcat实现,它主要包含以下几个关键组件: 1. **Catalina**:这是Tomcat的核心,负责管理Web应用程序的生命周期,包括加载、启动、运行和停止Web应用。在手写...

    计算机校外公司实习报告

    这份实习报告记录了河北科技大学计算机科学与技术专业的学生高小虎在2009年2月16日至2月27日期间,在深圳四达荣合有限公司进行的两周WEB开发实习经历。实习期间,学生不仅深入了解了公司的运营模式和企业文化,还...

    CGI网络编程基础教程

    CGI(Common Gateway Interface,通用网关接口)是Web服务器...通过深入学习这个CGI网络编程基础教程,你将能够创建自己的动态网页,理解Web服务器与后端应用程序之间的交互机制,为进阶的Web开发技术打下坚实的基础。

    LIUYANBAN.zip_c# 留言板_留言板

    在C# ASP留言板系统中,主要涉及以下几个关键知识点: 1. 数据库设计:留言板通常需要存储用户提交的留言信息,包括用户名、留言内容、时间等。这需要一个数据库来保存这些数据。在ASP.NET中,可以使用SQL Server...

    PHP实例开发源码-旧物回收类网站源码系统.zip

    源码系统中,PHP的运用体现在以下几个方面: 1. **用户认证与授权**:通过PHP的session和cookie机制,实现用户登录状态的跟踪,确保用户操作的安全性。 2. **数据库操作**:利用PHP的PDO(PHP Data Objects)或者...

    验证码登陆小实例(二)项目源码

    这个实例对于初学者来说,是...对于想要学习Web开发的同学,这是一个很好的实践项目,能够帮助他们理解和掌握这些基本技能。通过对LoginDemo源码的学习和调试,可以深入理解Web应用的工作原理,提升编程和调试能力。

    基于jsp程序的课程设计代码

    在这个课程设计中,学生可能需要掌握以下几个关键知识点: 1. **JSP基本概念**:理解JSP的基本原理,它是如何将HTML与Java代码结合,以及如何在服务器端运行Java代码来生成动态网页。 2. **JSP语法**:学习JSP指令...

    .net网络蜘蛛源程序及搜索引擎技术揭密

    在`WebSpider`源程序中,我们可能会遇到以下几个关键知识点: 1. **HTTP通信**:使用`System.Net.WebClient`或`HttpClient`类进行网页的下载,它们可以方便地处理GET和POST请求,获取响应内容。 2. **HTML解析**:...

    聊天室系统源码(无刷新).rar_asp.net_motorzzj_usuallylza_聊天室源码_聊天系统

    通过分析和学习这款聊天室源码,开发者不仅可以掌握ASP.NET的实战技巧,还能了解到在线聊天室的实现原理,对于提升Web开发技能和理解复杂系统设计有极大的帮助。同时,对于标签中的"motorzzj"和"usuallylza",可能是...

    商业编程-源码-ASP.NET经典案例源码之入门源码.zip

    在入门源码中,可能包含以下几个关键知识点: 1. **页面生命周期**:ASP.NET Web Forms的页面生命周期是理解其工作原理的关键。从初始化到加载,再到回发和卸载,每个阶段都有特定的任务,如控件创建、数据绑定和...

Global site tag (gtag.js) - Google Analytics