您的位置:首页 > 编程语言 > Java开发

springframework(六)AOP之静态代理

2016-07-29 00:00 435 查看
spring的AOP是基于代理的。java的事务控制是基于代理的。这两句话熟悉吧,一些老鸟就喜欢用这些词汇让我们犯晕,让我们感到他们很专业。这里我们将打破这个神话,本篇先介绍基于代理的AOP。这里我们先展示下什么叫做代理,先从静态代理开始。

一个静态代理的例子。
1、定义一个接口

package com.itcast.aop;
//要实现的接口
public interface IHello {
public void hello(String name) throws Exception;
public void helloAaa(String name);
public void helloBbb(String name);
}


2、一个实现接口的实例

package com.itcast.aop;
//实现方法1
public class HelloSpeaker implements IHello{
//	private Logger logger = Logger.getLogger(this.getClass().getName());
public void hello(String name) throws Exception{
System.out.println("Hello "+ name);
}
public void helloAaa(String name) {
System.out.println("Hello in aaa "+ name);
}
public void helloBbb(String name) {
System.out.println("Hello in bbb "+ name);
}
}


3
、调用的静态代理类

package com.itcast.aop; import java.util.Date; import java.util.logging.Logger; //静态代理类 public class HelloProxy implements IHello { private Logger logger = Logger.getLogger(this.getClass().getName()); private IHello helloObj; public HelloProxy(IHello helloObj){ this.helloObj=helloObj; } public void hello(String name) { logger.info("method start at "+new Date()); try { helloObj.hello(name); } catch (Exception e) { e.printStackTrace(); } logger.info("method end at "+new Date()); } public void helloAaa(String name) { System.out.println("Hello in aaa"+ name); } public void helloBbb(String name) { System.out.println("Hello in bbb"+ name); } //静态代理类的测试方法 public static void main(String[] args){ IHello proxy = new HelloProxy(new HelloSpeaker()); try { proxy.hello("tester"); } catch (Exception e) { e.printStackTrace(); } } }


上边就是我们的静态代理类,代理了我们IHello接口的实现类,并加上了自己的日志输出,在IHello的实现类的hello方法每次被调用的时候,都会被在其前后加上日志。

结果如下:

信息: method start at Sun Mar 15 10:57:31 CST 2009
2009-3-15 10:57:32 com.itcast.aop.HelloProxy hello
信息: method end at Sun Mar 15 10:57:32 CST 2009

以上就是静态代理,原理很简单,目的也很简单,就是调用接口实现类的某个方法之前或者之后调用另外的操作。

总结下开发步骤:

1、创建一个接口

2、创建一个接口的实现类

3、创建一个代理类,这个代理类也实现了上边的接口,但是将 要被代理的实现类传入到代理类中,在代理类的接口实现方法中调用,并在调用前后加上一些操作(上边的就是日志操作而已)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: