欢迎来到天天文库
浏览记录
ID:42596467
大小:53.61 KB
页数:16页
时间:2019-09-18
《Spring温故知新六AOP向切面程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、文章分类:Java编程这一章我们将开始剖析Spring框架最为重要的AOP(AspectOrientedProgramming)面向切面编程。可以说Spring的精华就在于AOP了。所谓AOP,就是相对于OOP(ObjectOrientedProgramming)面向对象编程的说法,有些人喜欢叫面向切面编程,有些人喜欢叫做面向方面,事实上这两个都是指同一个东西,只是叫法不同。我们传统的编程都是面向对象,就是说每个类都有它实际的意义。而面向切面略有不同,它在面向对象的基础上扩展了一下,它编程的时候不是先考虑的一个具体对象(比如用户类),而是先考虑的对象的行为或者功能。这个不是编程方法的不
2、同,而是编程思维的转变。理论性的东西还是放一边,我们用实际的机器人案例来慢慢理解这个概念。为了突出重点我们这里重写了ISpeak:packagecom.iteye.bolide74.impl;publicinterfaceISpeaker{publicvoidsay(Stringmsg);}接着是实现这个接口的机器人类:packagecom.iteye.bolide74.action;importcom.iteye.bolide74.impl.ISpeaker;publicclassRobotimplementsISpeaker{publicStringname;publicStrin
3、ggetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicRobot(Stringname){this.name=name;}@Overridepublicvoidsay(Stringmsg){System.out.println("到达邻居家,对邻居说:"+msg+",我是"+this.name);}}那么现在我们要实现跟很多个不同的邻居(不同的应用代码)打招呼,只需要下面的应用代码了:packagecom.iteye.bolide74.tester;importcom.iteye.bolid
4、e74.action.Robot;importcom.iteye.bolide74.impl.ISpeaker;publicclassTester{publicstaticvoidmain(String[]args){ISpeakerspeaker=newRobot("Wall-E");speaker.say("你好");}}以上是实现最简单功能的方法。现在我们要慢慢增加功能了,假设Wall-E在出发打招呼之前要先拿一个礼物,然后打完招呼以后把礼物递给邻居,该怎么实现呢?publicvoidgetGift(){System.out.println("获取了一个礼物");}publicv
5、oidgiveGift(){System.out.println("赠予一个礼物");}最傻的办法就是每次在应用代码里调用speaker.say()方法的前后都调用get/give方法,小程序还好,要是大型程序的话人都要写傻掉。那么能不能直接把get/give方法写在Robot类的say()方法里呢?这样好处是每次调用say()的时候都能实现get/give功能,但是坏处也是这个:万一有个别邻居是不需要给礼物的呢?怎么办?那有没有更加灵活的办法呢?当然有!代理模式:我们先新建一个SpeakerProxy代理类:packagecom.iteye.bolide74.action;impor
6、tcom.iteye.bolide74.impl.ISpeaker;publicclassSpeakerProxyimplementsISpeaker{ISpeakerspeaker;publicSpeakerProxy(ISpeakerspeaker){super();this.speaker=speaker;}@Overridepublicvoidsay(Stringmsg){getGift();speaker.say(msg);giveGift();}publicvoidgetGift(){System.out.println("获取了一个礼物");}publicvoidgive
7、Gift(){System.out.println("赠予一个礼物");}}这个SpeakerProxy类实现了ISpeaker接口,然后又有一个靠构造函数传入的ISpeaker类型的成员属性。而这个SpeakerProxy类的say()方法就有点意思了,它不是重写了自己的say()方法,而是调用了ISpeaker类型的speaker成员属性的say()方法,然后再这个say()方法前后嵌入get/give方法。让我们看看这个SpeakerPr
此文档下载收益归作者所有