34
Groovy MOPping Izzet Mustafayev@EPAM Systems @webdizz http://webdizz.name

Groovy MOPping

Embed Size (px)

DESCRIPTION

Every developer dreams about big red button to do everything he needs. MOP (Metaobject protocol) in Groovy is a way to get close to that dream. There is a presentation of meta programming concepts in Groovy and what benefits you can get from it.

Citation preview

Page 1: Groovy MOPping

Groovy

MOPping

Izzet Mustafayev@EPAM Systems@webdizzhttp://webdizz.name

Page 2: Groovy MOPping

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

agenda● Groovy

● MOP... what?

● AOP

● method injection/synthesis

● AST

● summary

● q&a

Page 4: Groovy MOPping
Page 5: Groovy MOPping

Groovy

Page 6: Groovy MOPping

Groovy is an agile dynamic language

Page 7: Groovy MOPping

Java is a Groovy but Groovy is not Java

Page 8: Groovy MOPping

Groovy supports DSL

Page 9: Groovy MOPping

Groovy provides statically type check

Page 10: Groovy MOPping

MOP...?

Page 11: Groovy MOPping

MOP Example GORM

class Person {

String name

Integer age

Date lastVisit

}

Person.findByName('Jack')

Page 12: Groovy MOPping

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

Object operation

str = 'hello'

method = str.metaClass.getMetaMethod

('toUpperCase')

println method.invoke(str) // HELLO

Page 14: Groovy MOPping

AOP

Page 15: Groovy MOPping

groovy.lang.GroovyInterceptable#invokeMethod

Page 16: Groovy MOPping

groovy.lang.MetaClass#invokeMethod

Page 17: Groovy MOPping

method injection

Page 18: Groovy MOPping

Category

Page 19: Groovy MOPping

ExpandoMetaClass

Page 20: Groovy MOPping

Class Instance

Page 21: Groovy MOPping

Mixing

Page 22: Groovy MOPping

method synthesis

Page 23: Groovy MOPping

methodMissing()

Page 24: Groovy MOPping

ExpandoMetaClass

Page 25: Groovy MOPping

AST transformations

Page 26: Groovy MOPping

interception

Page 27: Groovy MOPping

injection

Page 28: Groovy MOPping

summary

Page 29: Groovy MOPping

DSL

Page 30: Groovy MOPping

Source Analysis

Page 31: Groovy MOPping

Dependency Management

Page 32: Groovy MOPping

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

q&a

Page 34: Groovy MOPping

Groovy

MOPpingIzzet Mustafayev@EPAM Systems@webdizzhttp://webdizz.name

thank you!