Groovy MOPping
-
Upload
izzet-mustafaiev -
Category
Technology
-
view
517 -
download
2
description
Transcript of Groovy MOPping
![Page 1: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/1.jpg)
Groovy
MOPping
Izzet Mustafayev@EPAM Systems@webdizzhttp://webdizz.name
![Page 2: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/2.jpg)
this is me● SA at EPAM Systems
● primary skill Java
● hands-on-coding with Ruby, Groovy, some
Scala
● passion about agile, clean code practices
and devops
![Page 3: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/3.jpg)
agenda● Groovy
● MOP... what?
● AOP
● method injection/synthesis
● AST
● summary
● q&a
![Page 4: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/4.jpg)
![Page 5: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/5.jpg)
Groovy
![Page 6: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/6.jpg)
Groovy is an agile dynamic language
![Page 7: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/7.jpg)
Java is a Groovy but Groovy is not Java
![Page 8: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/8.jpg)
Groovy supports DSL
![Page 9: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/9.jpg)
Groovy provides statically type check
![Page 10: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/10.jpg)
MOP...?
![Page 11: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/11.jpg)
MOP Example GORM
class Person {
String name
Integer age
Date lastVisit
}
Person.findByName('Jack')
![Page 12: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/12.jpg)
Groovy Objectpackage groovy.lang;
public interface GroovyObject {
Object invokeMethod(String name, Object
args);
Object getProperty(String property);
void setProperty(String property, Object
newValue);
MetaClass getMetaClass();
void setMetaClass(MetaClass metaClass);
}
![Page 13: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/13.jpg)
Object operation
str = 'hello'
method = str.metaClass.getMetaMethod
('toUpperCase')
println method.invoke(str) // HELLO
![Page 14: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/14.jpg)
AOP
![Page 15: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/15.jpg)
groovy.lang.GroovyInterceptable#invokeMethod
![Page 16: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/16.jpg)
groovy.lang.MetaClass#invokeMethod
![Page 17: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/17.jpg)
method injection
![Page 18: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/18.jpg)
Category
![Page 19: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/19.jpg)
ExpandoMetaClass
![Page 20: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/20.jpg)
Class Instance
![Page 21: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/21.jpg)
Mixing
![Page 22: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/22.jpg)
method synthesis
![Page 23: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/23.jpg)
methodMissing()
![Page 24: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/24.jpg)
ExpandoMetaClass
![Page 25: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/25.jpg)
AST transformations
![Page 26: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/26.jpg)
interception
![Page 27: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/27.jpg)
injection
![Page 28: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/28.jpg)
summary
![Page 29: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/29.jpg)
DSL
![Page 30: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/30.jpg)
Source Analysis
![Page 31: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/31.jpg)
Dependency Management
![Page 32: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/32.jpg)
references● Groovy http://groovy.codehaus.org/
● CodeNarc http://codenarc.sourceforge.net/
● Gradle http://www.gradle.org/
● Gant http://gant.codehaus.org/
● Writting DSL http://groovy.codehaus.org/Writing+Domain-
Specific+Languages
● Dynamic Groovy http://groovy.codehaus.
org/Dynamic+Groovy
● Demo sources https://github.com/webdizz/groovy-mopping
![Page 33: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/33.jpg)
q&a
![Page 34: Groovy MOPping](https://reader031.fdocuments.in/reader031/viewer/2022020105/554f4067b4c905cd048b53c5/html5/thumbnails/34.jpg)
Groovy
MOPpingIzzet Mustafayev@EPAM Systems@webdizzhttp://webdizz.name
thank you!