parent
b1b3e6c425
commit
16f7947b53
@ -0,0 +1,202 @@ |
|||||||
|
--- |
||||||
|
Extension |
||||||
|
--- |
||||||
|
|
||||||
|
#### 目录 |
||||||
|
|
||||||
|
1. 简单 Extension |
||||||
|
2. 嵌套 Extension |
||||||
|
3. 嵌套容器 Extension |
||||||
|
|
||||||
|
#### 简单 Extension |
||||||
|
|
||||||
|
``` |
||||||
|
student { |
||||||
|
name 'Omooo' |
||||||
|
age 18 |
||||||
|
isMale false |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
class Student { |
||||||
|
String name |
||||||
|
int age |
||||||
|
boolean isMale |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
project.extensions.create('student', Student.class) |
||||||
|
Student student = project.extensions.getByType(Student.class) |
||||||
|
println(student.name) |
||||||
|
``` |
||||||
|
|
||||||
|
#### 嵌套 Extension |
||||||
|
|
||||||
|
``` |
||||||
|
student { |
||||||
|
name 'Omooo' |
||||||
|
age 18 |
||||||
|
isMale false |
||||||
|
|
||||||
|
info { |
||||||
|
qq 2333 |
||||||
|
email '2333@qq.com' |
||||||
|
isDog true |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
class Student { |
||||||
|
String name |
||||||
|
int age |
||||||
|
boolean isMale |
||||||
|
Info info |
||||||
|
|
||||||
|
@SuppressWarnings("UnstableApiUsage") |
||||||
|
Student(ObjectFactory factory) { |
||||||
|
info = factory.newInstance(Info.class) |
||||||
|
} |
||||||
|
|
||||||
|
def info(Action<Info> action) { |
||||||
|
action.execute(info) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
static class Info { |
||||||
|
String email |
||||||
|
int qq |
||||||
|
boolean isDog |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
project.extensions.create('student', Student.class, project.objects) |
||||||
|
Student student = project.extensions.getByType(Student.class) |
||||||
|
println(student.name) |
||||||
|
println(student.info.qq) |
||||||
|
``` |
||||||
|
|
||||||
|
#### 嵌套容器 Extension |
||||||
|
|
||||||
|
``` |
||||||
|
animal { |
||||||
|
count 2333 |
||||||
|
|
||||||
|
dog { |
||||||
|
form 'Animal' |
||||||
|
isMale false |
||||||
|
} |
||||||
|
|
||||||
|
catConfig { |
||||||
|
shanghaiCat { |
||||||
|
from 'Shanghai' |
||||||
|
weight 20000.0f |
||||||
|
} |
||||||
|
|
||||||
|
beijingCat { |
||||||
|
from 'Beijing' |
||||||
|
weight 300f |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
class Dog { |
||||||
|
String form |
||||||
|
boolean isMale |
||||||
|
|
||||||
|
@Override |
||||||
|
String toString() { |
||||||
|
return "Dog{" + |
||||||
|
"form='" + form + '\'' + |
||||||
|
", isMale=" + isMale + |
||||||
|
'}' |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
class Cat { |
||||||
|
String name |
||||||
|
|
||||||
|
String from |
||||||
|
float weight |
||||||
|
|
||||||
|
Cat(String name) { |
||||||
|
this.name = name |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
String toString() { |
||||||
|
return "Cat{" + |
||||||
|
"name='" + name + '\'' + |
||||||
|
", from='" + from + '\'' + |
||||||
|
", weight=" + weight + |
||||||
|
'}' |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
class CatExtFactory implements NamedDomainObjectFactory<Cat> { |
||||||
|
|
||||||
|
private Instantiator instantiator |
||||||
|
|
||||||
|
CatExtFactory(Instantiator instantiator1) { |
||||||
|
this.instantiator = instantiator1 |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
Cat create(String s) { |
||||||
|
return instantiator.newInstance(Cat.class, s) |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
class Animal { |
||||||
|
int count |
||||||
|
Dog dog |
||||||
|
private NamedDomainObjectContainer<Cat> catContainer |
||||||
|
|
||||||
|
Animal(Instantiator instantiator, |
||||||
|
NamedDomainObjectContainer<Cat> catContainer) { |
||||||
|
this.dog = instantiator.newInstance(Dog.class) |
||||||
|
this.catContainer = catContainer |
||||||
|
} |
||||||
|
|
||||||
|
void dog(Action<Dog> action) { |
||||||
|
action.execute(dog) |
||||||
|
} |
||||||
|
|
||||||
|
void catConfig(Action<? extends NamedDomainObjectContainer<Cat>> action) { |
||||||
|
action.execute(catContainer) |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
String toString() { |
||||||
|
return "dog info:" + dog.toString() + "\ncat info:" + catContainer |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
||||||
|
```groovy |
||||||
|
Instantiator instantiator = ((DefaultGradle) project.getGradle()) |
||||||
|
.getServices().get(Instantiator.class) |
||||||
|
NamedDomainObjectContainer<Cat> catContainer = |
||||||
|
project.container(Cat.class, new CatExtFactory(instantiator)) |
||||||
|
project.extensions.create('animal', Animal.class, instantiator, catContainer) |
||||||
|
|
||||||
|
project.task('showAnimalInfo'){ |
||||||
|
doLast{ |
||||||
|
Animal animal = project.extensions.getByName('animal') |
||||||
|
println(animal.toString()) |
||||||
|
} |
||||||
|
} |
||||||
|
``` |
||||||
|
|
Loading…
Reference in new issue