springframework(六)AOP之静态代理
2016-07-29 00:00
435 查看
spring的AOP是基于代理的。java的事务控制是基于代理的。这两句话熟悉吧,一些老鸟就喜欢用这些词汇让我们犯晕,让我们感到他们很专业。这里我们将打破这个神话,本篇先介绍基于代理的AOP。这里我们先展示下什么叫做代理,先从静态代理开始。
一个静态代理的例子。
1、定义一个接口
2、一个实现接口的实例
3
、调用的静态代理类
上边就是我们的静态代理类,代理了我们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、创建一个代理类,这个代理类也实现了上边的接口,但是将 要被代理的实现类传入到代理类中,在代理类的接口实现方法中调用,并在调用前后加上一些操作(上边的就是日志操作而已)
一个静态代理的例子。
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、创建一个代理类,这个代理类也实现了上边的接口,但是将 要被代理的实现类传入到代理类中,在代理类的接口实现方法中调用,并在调用前后加上一些操作(上边的就是日志操作而已)
相关文章推荐
- springframework(三)Bean的基本管理
- springframework(九)AOP的advices,中规中矩的使用方式
- 在spring的bean中获取ServletContext
- godaddy的VDS设置java_opts的位置
- eclipse上ofbiz项目的断点调试
- Activemq5.2.0的spring开发
- springframework(二)第一个spring程序
- springframework(八)AOP的相关术语以及实现方式介绍
- 持续集成之sonar+eclipse(六)
- springframework(六)AOP之静态代理
- java加解密-数字证书
- 如何在Java中避免equals方法的隐藏陷阱
- struts2 ognl中计数器的使用
- springframework(十四)spring的事务管理
- springframe(七)AOP之动态代理
- springframework(五)资源国际化
- springframework(十)AOP之Pointcut、Advisor
- java版本的图片的缩放剪辑(二)
- java加解密-密钥长度限制问题
- 用GDB 调试Java程序