预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

反射实现AOP动态代理模式(SpringAOP的实现原理) AOP的意思就是面向切面编程. OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决解决问题的方法 中的共同点,是对OO思想的一种补充! 还是拿人家经常举的一个例子讲解一下吧: 比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行 做全面监控,或部分监控.也许我们就会在要一些方法前去加上一条日志记录, 我们写个例子看看我们最简单的解决方案 我们先写一个接口IHello.java代码如下: 1packagesinosoft.dj.aop.staticaop; 2 3publicinterfaceIHello{ 4/** 5*假设这是一个业务方法 6*@paramname 7*/ 8voidsayHello(Stringname); 9} 10 里面有个方法,用于输入"Hello"加传进来的姓名;我们去写个类实现IHello接口 packagesinosoft.dj.aop.staticaop; publicclassHelloimplementsIHello{ publicvoidsayHello(Stringname){ System.out.println("Hello"+name); } } 现在我们要为这个业务方法加上日志记录的业务,我们在不改变原代码的情况下,我们会去怎么 做呢?也许,你会去写一个类去实现IHello接口,并依赖Hello这个类.代码如下: 1packagesinosoft.dj.aop.staticaop; 2 3publicclassHelloProxyimplementsIHello{ 4privateIHellohello; 5 6publicHelloProxy(IHellohello){ 7this.hello=hello; 8} 9 10publicvoidsayHello(Stringname){ 11Logger.logging(Level.DEBUGE,"sayHellomethodstart."); 12hello.sayHello(name); 13Logger.logging(Level.INFO,"sayHellomethodend!"); 14 15} 16 17} 18 其中.Logger类和Level枚举代码如下: Logger.java 1packagesinosoft.dj.aop.staticaop; 2 3importjava.util.Date; 4 5publicclassLogger{ 6/** 7*根据等级记录日志 8*@paramlevel 9*@paramcontext 10*/ 11publicstaticvoidlogging(Levellevel,Stringcontext){ 12if(level.equals(Level.INFO)){ 13System.out.println(newDate().toLocaleString()+""+context); 14} 15if(level.equals(Level.DEBUGE)){ 16System.err.println(newDate()+""+context); 17} 18} 19 20} 21 Level.java 1packagesinosoft.dj.aop.staticaop; 2 3publicenumLevel{ 4INFO,DEBUGE; 5} 6 那我们去写个测试类看看,代码如下: Test.java 1packagesinosoft.dj.aop.staticaop; 2 3publicclassTest{ 4publicstaticvoidmain(String[]args){ 5IHellohello=newHelloProxy(newHello()); 6hello.sayHello("Doublej"); 7} 8} 9 运行以上代码我们可以得到下面结果: TueMar0420:57:12CST2008sayHellomethodstart. HelloDoublej 2008-3-420:57:12sayHellomethodend! 从上面的代码我们可以看出,hello对象是被HelloProxy这个所谓的代理态所创建的.这样,如果 我们以后要把日志记录的功能去掉.那我们只要把得到hello对象的代码改成以下: 1pac