反射实现 AOP 动态代理模式

反射实现 AOP 动态代理模式

ID:37256422

大小:225.32 KB

页数:14页

时间:2019-05-20

反射实现 AOP 动态代理模式_第1页
反射实现 AOP 动态代理模式_第2页
反射实现 AOP 动态代理模式_第3页
反射实现 AOP 动态代理模式_第4页
反射实现 AOP 动态代理模式_第5页
资源描述:

《反射实现 AOP 动态代理模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、反射实现AOP动态代理模式(SpringAOP的实现原理)好长时间没有用过Spring了.突然拿起书.我都发现自己对AOP都不熟悉了.其实AOP的意思就是面向切面编程.OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决解决问题的方法中的共同点,是对OO思想的一种补充!还是拿人家经常举的一个例子讲解一下吧:比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控.也许我们就会在要一些方法前去加上一条日志记录,我们写个例子看看我们最

2、简单的解决方案我们先写一个接口IHello.java代码如下:1packagesinosoft.dj.aop.staticaop;23publicinterfaceIHello{4/**5*假设这是一个业务方法6*@paramname7*/8voidsayHello(Stringname);9}10里面有个方法,用于输入"Hello"加传进来的姓名;我们去写个类实现IHello接口packagesinosoft.dj.aop.staticaop;publicclassHelloimplementsIHell

3、o{publicvoidsayHello(Stringname){System.out.println("Hello"+name);}}现在我们要为这个业务方法加上日志记录的业务,我们在不改变原代码的情况下,我们会去怎么做呢?也许,你会去写一个类去实现IHello接口,并依赖Hello这个类.代码如下:1packagesinosoft.dj.aop.staticaop;23publicclassHelloProxyimplementsIHello{4privateIHellohello;56publicHe

4、lloProxy(IHellohello){7this.hello=hello;8}910publicvoidsayHello(Stringname){11Logger.logging(Level.DEBUGE,"sayHellomethodstart.");12hello.sayHello(name);13Logger.logging(Level.INFO,"sayHellomethodend!");1415}1617}18其中.Logger类和Level枚举代码如下:Logger.java1packag

5、esinosoft.dj.aop.staticaop;23importjava.util.Date;45publicclassLogger{6/**7*根据等级记录日志8*@paramlevel9*@paramcontext10*/11publicstaticvoidlogging(Levellevel,Stringcontext){12if(level.equals(Level.INFO)){13System.out.println(newDate().toLocaleString()+""+contex

6、t);14}15if(level.equals(Level.DEBUGE)){16System.err.println(newDate()+""+context);17}18}1920}21Level.java1packagesinosoft.dj.aop.staticaop;23publicenumLevel{4INFO,DEBUGE;5}6那我们去写个测试类看看,代码如下:Test.java1packagesinosoft.dj.aop.staticaop;23publicclassTest{4publ

7、icstaticvoidmain(String[]args){5IHellohello=newHelloProxy(newHello());6hello.sayHello("Doublej");7}8}9运行以上代码我们可以得到下面结果:TueMar0420:57:12CST2008sayHellomethodstart.HelloDoublej2008-3-420:57:12sayHellomethodend!从上面的代码我们可以看出,hello对象是被HelloProxy这个所谓的代理态所创建的.这样,

8、如果我们以后要把日志记录的功能去掉.那我们只要把得到hello对象的代码改成以下:1packagesinosoft.dj.aop.staticaop;23publicclassTest{4publicstaticvoidmain(String[]args){5IHellohello=newHello();6hello.sayHello("Doublej");7}8}9上面代码,可以说是AOP最简单的实现!但是我们

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。