Scala AOP

trait Action {

  def doAction
}
trait TBeforeAfter extends Action {
  abstract override def doAction {
    println("Initialization")
    super.doAction
    println("Destroyed")
  }
}

class Work extends Action{
  override def doAction = println("Working...")
}

object UseTrait extends App{
  val work = new Work with TBeforeAfter
  work.doAction
}

输出:

Initialization
Working...
Destroyed

解释:

work.doAction会调用TBeforeAfter的doAction方法,所以会打印Initialization和Destroyed,中间的Working是super.doAction调用了父类Action的doAction方法,该方法是抽象方法,所以会寻找子类中的实现,找到了Work类中的doAction方法。

时间: 2024-10-07 05:15:44

Scala AOP的相关文章

[Scala基础系列 08]Scala继承、抽象类、接口trait以及AOP实现

1.继承 和java一样,scala采用extends关键字继承基类.代码实例如下: /** * Created by molyeo on 2015/8/11. */ class Person(val name: String, var age: Int) { println("The primary constructor of Person") val school = "BJU" def sleep = "8 hours" override

scala 15 多重继承 AOP实现

DT大数据梦工厂scala的所有视频.PPT和代码在百度云盘的链接:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group <Scala深入浅出实战初级入门经典视频课程>http://edu.51cto.com/lesson/id-66538.html <Scala深入浅出实战中级进阶经典视频课程>http://edu.51cto.com/lesson/id-6713

从大数据菜鸟走上大师的历程 Scala 第十三讲 AOP

原视频教程中多重继承相对比较好理解,主要AOP切面编程过程需要好好理解以下是具体实例: trait Action { def doAction } trait BeforeAfter extends Action {   abstract override def doAction   {     println("before...")     super.doAction     println("after...")   }  } class Dog exte

Scala多重继承及AOP

1 package traitandclass 2 3 /** 4 * Created by zhen on 2018/8/23. 5 */ 6 class Human { 7 println("Human") 8 } 9 trait Teacher extends Human{ 10 println("Teacher") 11 def teach 12 } 13 trait Player extends Human{ 14 println("Player

大数据系列修炼-Scala课程05

Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实现 多重继承构造器执行顺序:多重继承构造器执行顺序是从左到右按次序执行,如果前面类以及被继承实现了,后面的类就没有必要去实现,父类只需执行一次 object triatScala { def main(args: Array[String]): Unit = { val t1 = new Piano

Scala 堆叠Traits实现对方法的增强

Scala 堆叠Traits实现对方法或函数的增强 简单的来说,堆叠Trait类似于AOP,实现对方法功能的增强,而不去修改原有方法的逻辑. 比如我们实现一个队列,我们可以定义一个队列的抽象类,实现入队和出队操作,用scala这样写,和java差不多, abstract class IntQueue {   def get(): Int   def put(x: Int) } 我们去实现这个抽象类, class BasicIntQueue extends IntQueue {   private

新书:Scala语言基础与开发实战

大数据科学丛书系列的最新一本<Scala语言基础与开发实战>即将面市,预计月底上架.内容还是不错的,文笔简介,内容实用,值得学.用. 大数据资深培训师王家林新作. 详细介绍大数据开发语言Scala及其在分布式框架Akka和Kafka中的应用. 秉承"实战"类图书特点,解析大量代码的编写操作,具有较强的可操作性,便于读者学习和理解. 算上再过几个月出版的<Spark内核解析及性能调优>,一年时间,大数据科学丛书系列之Spark的小套系基本形成了:从学习Spark的

Scala(一)基础

OOP 面向对象编程 AOP 面向切面编程 FP 函数式编程 编程语言都要定义变量,一些代码是用来注释的,变量和变量之间有一些关系,要做一些运算,运算离不开流程控制,进行运算的数据往往来自数据结构,最基本的是数组. 所有编程语言的需要: 变量 注释 运算符 流程控制 数组 编码规范:命名.换行.缩进.分号 变量 在java中定义变量,必须要使用数据类型来声明.Scala中不用,只需要使用两个关键字来声明即可,var.val. scala> var a = 1 a: Int = 1 scala>

Spring框架之Spring AOP

一.基于注解管理的AOP 1.Spring配置文件 <!-- 配置自动扫描包,自动扫描Bean组件,切面类 --> <context:component-scan base-package="com.zhoujian.spring.anno,com.zhoujian.spring.test"> <!-- <context:include-filter type="annotation" expression="org.a