利用scala的trait特性实现简单AOP
2016-06-30 14:38
483 查看
最近开始系统的研究下scala
trait字面意思是特质或者特征,这里翻译成特征比较合适。
scala中trait的意义和java中接口很类似,但是trait支持实现,也就是说在scala的trait中方法可以是抽象方法,也可以是带实现的非抽象方法。
另一个重要的与java interface的不同点,scala可以在一个class实例化的时候通过with关键字混合进一个trait。with关键字用来实现包装器的功能。
利用上面提到的特性,来实现一个简单的AOP
定义一个SchoolTrait,添加一个抽象方法,不需要将方法声明为abstract,特征中未被实现的方法默认就是抽象的
package test trait SchoolTrait { def study() }
定义一个ClassTrait,ClassTrait继承于SchoolTrait,并重写父类SchoolTrait的study方法
package test trait ClassTrait extends SchoolTrait{ abstract override def study()={ //上课前向老师问好 println("=====Hello Teacher=== 4000 ==") //调用原来的处理 super.study println("=====Goodbye Teacher=====") //下课后向老师道别 } }
下面用一个测试类TeachClass,来进行验证
package test class TeachClass extends SchoolTrait{ def study(){ println("*** start math cource ***"); } } object TeachClass { def main(agrs : Array[String]){ val test = new TeachClass with ClassTrait test.study } }
查看运行结果
=====Hello Teacher=====
*** start math cource ***
=====Goodbye Teacher=====
相关文章推荐
- 利用scala的trait特性实现简单AOP
- .net利用Attribute简单实现AOP
- C#利用反射+特性实现简单的实体映射数据库操作类
- 利用javascript特性实现的简单HashTable
- 利用反射+特性实现简单的实体映射数据库操作类
- 利用TreeMap有序特性实现没有重复元素的简单排序
- Scala中的语言特性是如何实现的(3) -- Trait
- C#利用反射+特性实现简单的实体映射数据库操作类
- 利用动态代理实现AOP的简单示例(JDK和cglib分别实现)
- 利用反射+特性实现简单的实体映射数据库操作类(还未做自动生成SQL语句部分)
- c#利用反射+特性实现简单的实体映射数据库操作类(表与类的映射)
- 利用SQL Server 2005的新特性来简单高效的实现分页
- 利用Scala特征(trait)的堆叠操作特性进行切面编程
- 利用反射+自定义特性实现简单ORM(二),“无SQL”的数据库增删改查
- Scala中的语言特性是如何实现的(3) -- Trait
- 利用特性功能实现简易的AOP日志记录功能
- Scala中的语言特性是如何实现的(3) -- Trait
- 【Java疑难杂症】利用Java核心库实现简单的AOP
- C#利用反射+特性实现简单的实体映射数据库操作类
- 利用JAVA的动态属性之反射原理实现一个简单AOP容器 - AOP的实现原理分析