Kela's Blog

            前面的路很坎坷,但毕竟是条路.也许走过这一段就会发现,走过去就是梦想中的地方.因此坚持成为此刻唯一能做且必须去做的事情.
posts - 9, comments - 27, trackbacks - 0, articles - 15

kela的笔记 应用程序框架 ---- spring(6)

Posted on 2006-08-29 15:27 Kela 阅读(178) 评论(0)  编辑  收藏 所属分类: 我的笔记(Spring)

摘要:Spring AOP ,从代理机制看AOP,静态代理的范例。

 

在一个服务的流程中插入与业务逻辑无关的系统服务逻辑(比如 LoggingSecurity),这样的逻辑称为Cross-cutting concerns,将Cross-cutting concerns独立出来设计为一个对象,这样的特殊对象称之为AspectAspect-oriented programming着重在Aspect的设计及与应用程序的织入(Weave)。

 

     静态代理

 

在静态代理的实现中,代理对象与被代理对象都必须实现同一个接口,在代理对象中可以实现日志记录等相关服务,并在需要的时候再呼叫被代理的对象,如此代理对象当中就可以仅保留业务相关职责。

     IHello.java

 

package com.kela.spring.aop;

 

public interface IHello {

    public void hello(String name);

}

     HelloSpeaker.java

 

package com.kela.spring.aop;

 

public class HelloSpeaker implements IHello {

 

    public void hello(String name) {

        System.out.println(" 你好," + name);

    }

}

     HelloProxy.java

 

package com.kela.spring.aop;

 

import org.apache.log4j.Logger;

 

public class HelloProxy implements IHello {

    private Logger log = Logger.getLogger(this.getClass().getName());

   

    private IHello helloObject;

   

    public HelloProxy(IHello helloObject) {

        this.helloObject = helloObject;

    }

   

    public void hello(String name) {

        // 日志记录

        log.info("hello 方法开始执行... ...");

        // 执行业务逻辑

        helloObject.hello(name);

        // 日志记录

        log.info("hello 方法执行完毕");

    }

}

     ProxyDemo.java

 

package com.kela.spring.aop;

 

public class ProxyDemo {

 

    public static void main(String[] args) {

        HelloProxy proxy = new HelloProxy(new HelloSpeaker());

       

        proxy.hello("KELA");

    }

}

     运行结果

 

HelloProxy - hello 方法开始执行 ... ...

  你好, KELA

HelloProxy - hello 方法执行完毕

 

     学习小结

 

静态代理中,代理对象的一个接口只服务于一种类型的对象,而且如果要代理的方法很多,势必要为每个方法进行代理,静态代理在程序规模稍大时就无法胜任。


只有注册用户登录后才能发表评论。


网站导航:
 
分享到: