【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Mixin 注解进行方法注入 | Mixin 混合多个类优先级分析 )
2023-06-13 09:18:00 时间
文章目录
一、使用 Mixin 混合进行方法注入
在上一篇博客 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Mixin 混合进行方法注入 ) 中 , 使用了
// 将 Hello 类中的方法注入到 Student 类中
Student.mixin(Hello)
代码 , 将两个类进行混合 , 可以使用 @Mixin 注解 , 混合两个类 ,
@Mixin(Hello)
class Student {
def name
}
上述两种操作是等效的 , 代码示例 :
@Mixin(Hello)
class Student {
def name
}
// 定义被注入的方法
class Hello {
def hello (Student student) {
println "Hello ${student.name}"
}
}
// 将 Hello 类中的方法注入到 Student 类中
//Student.mixin(Hello)
// 创建 Student 对象
def student = new Student(name: "Tom")
// 调用被注入的方法
student.hello(student)
执行结果 :
Hello Tom
二、Mixin 混合多个类优先级分析
如果定义了
个注入方法类 , 其中都定义了 hello 方法 ,
// 定义被注入的方法
class Hello {
def hello (Student student) {
println "Hello ${student.name}"
}
}
// 定义被注入的方法2
class Hello2 {
def hello (Student student) {
println "Hello2 ${student.name}"
}
}
调用类的 mixin 方法 , 同时注入两个类 , 调用方法时 , 从右侧的注入类开始查找对应的注入方法 ;
// 将 Hello 类中的方法注入到 Student 类中
Student.mixin(Hello, Hello2)
上述注入的方法类 , 先查找 Hello2 中是否有 hello 方法 , 如果有直接使用 , Hello 类中的 hello 方法被屏蔽了 ;
在下面的代码中 , 执行 Student 对象的 hello 方法 , 执行的是 Hello2#hello 方法 ;
// 创建 Student 对象
def student = new Student(name: "Tom")
// 调用被注入的方法
student.hello(student)
代码示例 :
class Student {
def name
}
// 定义被注入的方法
class Hello {
def hello (Student student) {
println "Hello ${student.name}"
}
}
// 定义被注入的方法2
class Hello2 {
def hello (Student student) {
println "Hello2 ${student.name}"
}
}
// 将 Hello 类中的方法注入到 Student 类中
Student.mixin(Hello, Hello2)
// 创建 Student 对象
def student = new Student(name: "Tom")
// 调用被注入的方法
student.hello(student)
执行结果 :
Hello2 Tom
相关文章
- 筛选加粗字体格式的单元格的3种方法
- 【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 进行方法注入构造方法 )
- 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Mixin 混合进行方法注入 )
- 【Groovy】编译时元编程 ( 编译时方法注入 | 使用 buildFromSpec、buildFromString、buildFromCode 进行方法注入 )
- PHP防止被xss和sql语句注入攻击的方法(网站和app通用)详解编程语言
- 关于解决游戏warzone2100(战地2100)中文乱码的方法
- 解决Oracle 959错误的方法(oracle959错误)
- T-SQL篇如何防止SQL注入的解决方法
- MySQL注入攻击的高级防范方法(mysql注入高级)
- Mysql注入点在limit关键字后面的利用方法
- MySQL中防御SQL注入攻击的方法(mysql中sql注入)
- MySQL中IN语句的参数化使用方法(mysql中in参数化)
- 初识Redis连接池的使用方法(redis连接池怎么使用)
- ASP+MSSQL2000数据库被批量注入后的解决方法
- javascriptBase类包含基本的方法
- PHP中防止SQL注入攻击和XSS攻击的两个简单方法
- php中经典方法实现判断多维数组是否为空
- php中防止SQL注入的最佳解决方法
- 探讨php中防止SQL注入最好的方法是什么
- JS中的数组的sort方法使用示例
- ubuntu14.04使用中遇到的问题及解决方法集锦
- PHP中防止SQL注入方法详解