`
wj_126mail
  • 浏览: 127798 次
  • 性别: 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也是运用代理模式的思想来实现的。

相关推荐

Global site tag (gtag.js) - Google Analytics