理论教育 Scala语言中多重继承的构造器执行顺序-实战经验分享

Scala语言中多重继承的构造器执行顺序-实战经验分享

时间:2023-11-24 理论教育 版权反馈
【摘要】:在Scala特质trait的多重继承构造器执行中,执行的顺序是从左往右,即new一个PianoTeacher对象,执行顺序为:●先执行Human的构造器语句。图2-11多重继承构造器执行顺序AOP指面向切面编程,将业务逻辑和系统服务进行分离,AOP的主要功能是日志记录、性能统计、安全控制、事务处理、异常处理等。

Scala语言中多重继承的构造器执行顺序-实战经验分享

在Scala特质trait的多重继承构造器执行中,执行的顺序是从左往右,即new一个Pi⁃anoTeacher对象,执行顺序为:

●先执行Human的构造器语句。

●然后执行TTeacher特质的构造器语句。

●最后执行PianoPlayer特质的构造器语句。

978-7-111-54169-1-Chapter02-67.jpg

运行结果如图2-11所示。新建PianoTeacher对象t1,类PianoTeacher多重继承了Hu⁃man、TTeacher、PianoPlayer,实例化时从左往右先执行Human的构造器语句,打印输出Human;然后执行TTeacher特质的构造器语句,打印输出TTeacher;接着执行PianoPlayer特质的构造器语句,打印输出PianoPlayer;然后调用t1的playPiano方法,打印输出I’m pla⁃ying piano调用t1的teach方法,打印输出“I’m training students.”。

978-7-111-54169-1-Chapter02-68.jpg

图2-11 多重继承构造器执行顺序 978-7-111-54169-1-Chapter02-69.jpg(www.daowen.com)

AOP(Aspect Oriented Programming)指面向切面编程,将业务逻辑和系统服务(如日志事物)进行分离,AOP的主要功能是日志记录、性能统计、安全控制、事务处理、异常处理等。在Java的Spring框架的AOP得到了大量应用。

在Scala中,AOP的设计思想可以使用特质trait来实现日志事务切面的功能。如例2-13所示。定义Action特质,拥有doAction抽象方法;定义TBeforeAfter特质,继承Action特质,然后重写doAction方法,在doAction方法中调用super.doAction方法来实现日志事物切面的功能;定义class Work类继承Action特质,重写了doAction方法。

【例2-13】Scala使用特质trait来实现日志事务切面的功能示例。

978-7-111-54169-1-Chapter02-70.jpg

运行结果如图2-12所示。新建一个Work对象,混入TBeforeAfter特质,调用work对象的doAction方法时,先调用TbeforeAfter的doAction方法,打印输出Initialization,然后执行super的doAction方法,由于class Work继承了Action特质,因此执行super的doAction方法时候重载执行的是子类Work的doAction方法,打印输出Working…;然后接着执行super.doAction之后的语句println("Destroyed"),打印输出Destroyed。TBeforeAfter特质相当于进行了日志切面,可以在Work代码中加载自己的日志处理信息。

978-7-111-54169-1-Chapter02-71.jpg

图2-12 AOP代码

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈