首页 > 学院 > 开发设计 > 正文

Groovy分类注入

2019-11-08 02:00:54
字体:
来源:转载
供稿:网友

Groovy分类注入

1、Groovy使用use来注入方法,但该方法必须是静态的,并且第一个参数必须是目标对象。
class AGroovyClass {	def add(val1, val2) {		val1 + val2	}}class AGroovyClassExtend {	def static add(self, val1, val2, val3) {		self.add(self.add(val1, val2), val3)	}}use(AGroovyClassExtend) {	obj = new AGroovyClass()	PRintln obj.add("Hello ", "World!")	println obj.add("Hello ", "World!", " Welcome to Groovy!")}返回Hello World!Hello World! Welcome to Groovy!2、Categoty注解将静态方法转变为实例方法。
class AGroovyClass {	def add(val1, val2) {		val1 + val2	}}@Category(AGroovyClass)class AGroovyClassExtend {	def add(val1, val2, val3) {		add(add(val1, val2), val3)	}}use(AGroovyClassExtend) {	obj = new AGroovyClass()	println obj.add("Hello ", "World!")	println obj.add("Hello ", "World!", " Welcome to Groovy!")}返回Hello World!Hello World! Welcome to Groovy!3、注入的方法可以使用类或闭包作为参数。
class AGroovyClass {}@Category(AGroovyClass)class AGroovyClassFilter {	def filter(array, closure) {		array.collect { closure(it) }	}}use(AGroovyClassFilter) {	obj = new AGroovyClass()	println obj.filter([1, 2, 3, 4, 5, 6]) { it * it }}返回[1, 4, 9, 16, 25, 36]4、use方法支持多个分类注入。
class AGroovyClass {    def add(val1, val2) {        val1 + val2    }}@Category(AGroovyClass)class AGroovyClassExtend {    def add(val1, val2, val3) {        add(add(val1, val2), val3)    }}@Category(AGroovyClass)class AGroovyClassFilter {    def filter(array, closure) {        array.collect { closure(it) }    }}use(AGroovyClassExtend, AGroovyClassFilter) {	obj = new AGroovyClass()	println obj.add("Hello ", "World!")	println obj.add("Hello ", "World!", " Welcome to Groovy!")	println obj.filter([1, 2, 3, 4, 5, 6]) { it * it }}5、注入的方法拦截原有方法
class AGroovyClass {    def add(val1, val2) {        val1 + val2    }    def add(val1, val2, val3) {        val1 + val2 + val3    }}class AGroovyClassExtend {    def static add(self, val1, val2) {        "AGroovyClassExtend add"    }	// 只有指定了self的类型,才会拦截    def static add(AGroovyClass self, val1, val2, val3) {        "AGroovyClassExtend add"    }}use(AGroovyClassExtend) {    obj = new AGroovyClass()    println obj.add("Hello ", "World!") // Hello World!    println obj.add("Hello ", "World!", " Welcome to Groovy!") // AGroovyClassExtend add}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表