SlideShare une entreprise Scribd logo
1  sur  536
Télécharger pour lire hors ligne
prepare for…
DI - Frameworks
..some hidden pearls
@SvenRuppert
has been coding java since 1996
Head of R&D / Fellow
reply
Germany - Munich
2
@SvenRuppert
has been coding java since 1996
3
@SvenRuppert
has been coding java since 1996
Projects in the field of:
•Automobile-industry
•Energy
•Finance / Leasing
•Space- Satellit-
•Government / UN / World-bank
Where?
•Europe
•Asia - from India up to Malaysia
3
4
Save harbor statement
4
Save harbor statement
The following is intended for information purposes only. I
can not be held responsible for the overuse of effects and
animations in this presentation. If any person in this room
has a medical condition that is triggered by fast moving
objects on the screen and/or explosions, he/she should
probably better leave now…
(I got carried away by the topic.)
5
The Basics @SvenRuppert
targets we want to reach
5
The Basics @SvenRuppert
targets we want to reach
divide a system into modules
5
The Basics @SvenRuppert
targets we want to reach
divide a system into modules
decouple contract and implementations
5
The Basics @SvenRuppert
targets we want to reach
divide a system into modules
decouple contract and implementations
decrease complexity
5
The Basics @SvenRuppert
targets we want to reach
divide a system into modules
decouple contract and implementations
decrease complexity
but… lets start with the basics
6
The Basics @SvenRuppert
6
The Basics @SvenRuppert
public List<Data> execute() {
//....
return result;
}
6
The Basics @SvenRuppert
public List<Data> execute() {
//....
return result;
}
import java.util.List;
6
The Basics @SvenRuppert
public List<Data> execute() {
//....
return result;
}
import java.util.List;
final List<Data> result = new ArrayList<>();
6
The Basics @SvenRuppert
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
6
The Basics @SvenRuppert
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
if we don´t need a method like trimToSize()
6
The Basics @SvenRuppert
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
if we don´t need a method like trimToSize()
we want to get rid of the dep. ArrayList
6
The Basics @SvenRuppert
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
if we don´t need a method like trimToSize()
we want to get rid of the dep. ArrayList
7
The Basics @SvenRuppert
import java.util.List;
import java.util.ArrayList;
if we don´t need a method like trimToSize()
we want to get rid of the dep. ArrayList
this will lead to some questions
7
The Basics @SvenRuppert
import java.util.List;
import java.util.ArrayList;
if we don´t need a method like trimToSize()
we want to get rid of the dep. ArrayList
this will lead to some questions
what will be the right Implementation?
7
The Basics @SvenRuppert
import java.util.List;
import java.util.ArrayList;
if we don´t need a method like trimToSize()
we want to get rid of the dep. ArrayList
this will lead to some questions
what will be the right Implementation?
what is the right time to decide?
7
The Basics @SvenRuppert
import java.util.List;
import java.util.ArrayList;
if we don´t need a method like trimToSize()
we want to get rid of the dep. ArrayList
this will lead to some questions
what will be the right Implementation?
what is the right time to decide?
what is the right freq. to decide?
8
The Basics @SvenRuppert
import java.util.List;
import java.util.ArrayList;
if we don´t need a method like trimToSize()
we want to get rid of the dep. ArrayList
this will lead to some questions
what will be the right Implementation?
what is the right time to decide?
what is the right freq. to decide?
8
The Basics @SvenRuppert
what will be the right Implementation?
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
final List arrayList = createArrayList();
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
final List arrayList = createArrayList();
import java.util.ArrayList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
final List arrayList = createArrayList();
import java.util.ArrayList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
final List arrayList = createArrayList();
final List linkedList = createLinkedList();
import java.util.ArrayList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
final List arrayList = createArrayList();
final List linkedList = createLinkedList();
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
public static List createList() { return new ArrayList(); }
final List arrayList = createArrayList();
final List linkedList = createLinkedList();
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
public static List createList() { return new ArrayList(); }
final List arrayList = createArrayList();
final List linkedList = createLinkedList();
final List list = createList();
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
public static List createList() { return new ArrayList(); }
final List arrayList = createArrayList();
final List linkedList = createLinkedList();
final List list = createList();
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
public static List createList() { return new ArrayList(); }
final List arrayList = createArrayList();
final List linkedList = createLinkedList();
final List list = createList();
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
public static List createList() { return new ArrayList(); }
final List arrayList = createArrayList();
final List linkedList = createLinkedList();
final List list = createList();
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
9
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public class ListFactory {









public static void main(String[] args) {







}

}
public static List createArrayList() { return new ArrayList(); }
public static List createLinkedList() { return new LinkedList(); }
public static List createList() { return new ArrayList(); }
final List arrayList = createArrayList();
final List linkedList = createLinkedList();
final List list = createList();
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
What goals we
reached?
10
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import org.rapidpm.ListFactory;
final List<Data> result = ListFactory.createArrayList();
10
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import org.rapidpm.ListFactory;
final List<Data> result = ListFactory.createArrayList();
10
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import org.rapidpm.ListFactory;
final List<Data> result = ListFactory.createArrayList();
10
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import org.rapidpm.ListFactory;
final List<Data> result = ListFactory.createArrayList();
10
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import org.rapidpm.ListFactory;
final List<Data> result = ListFactory.createArrayList();
10
The Basics @SvenRuppert
what will be the right Implementation?
with default Java SE
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import java.util.ArrayList;
final List<Data> result = new ArrayList<>();
public List<Data> execute() {
//....
return result;
}
import java.util.List;
import org.rapidpm.ListFactory;
final List<Data> result = ListFactory.createArrayList();
11
The Basics @SvenRuppert
what is the right time to decide?
what is the right freq. to decide?
Scopes:
11
The Basics @SvenRuppert
what is the right time to decide?
what is the right freq. to decide?
Scopes:
Application / Singleton
11
The Basics @SvenRuppert
what is the right time to decide?
what is the right freq. to decide?
Scopes:
Application / Singleton
Session
11
The Basics @SvenRuppert
what is the right time to decide?
what is the right freq. to decide?
Scopes:
Application / Singleton
Session
Request
11
The Basics @SvenRuppert
what is the right time to decide?
what is the right freq. to decide?
Scopes:
Application / Singleton
Session
Request
Method
12
The Basics @SvenRuppert
12
The Basics @SvenRuppert
public interface Service {

String doWork();

}
12
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
12
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
public static class BusinessModulA {

private Service service;



public BusinessModulA(final Service service) {

this.service = service;

}

public void work() {

service.doWork();

}

}
12
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
public static class BusinessModulA {

private Service service;



public BusinessModulA(final Service service) {

this.service = service;

}

public void work() {

service.doWork();

}

}
constructor
13
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
13
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
public static class BusinessModulB {

private Service service;



public void setService(final Service service) {

this.service = service;

}



public void work() {

service.doWork();

}

}
13
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
public static class BusinessModulB {

private Service service;



public void setService(final Service service) {

this.service = service;

}



public void work() {

service.doWork();

}

}
expl. setter
14
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
14
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
public static class BusinessModulC {

private Service service;



public void work() {

service.doWork();

}

}
14
The Basics @SvenRuppert
public interface Service {

String doWork();

} public static class Service2Inject implements Service {

public String doWork() {

return null;

}

}
public static class BusinessModulC {

private Service service;



public void work() {

service.doWork();

}

}
reflection
15
The Basics @SvenRuppert
BusinessModulA businessModulA 

= new BusinessModulA(new Service2Inject());

businessModulA.work();
15
The Basics @SvenRuppert
BusinessModulA businessModulA 

= new BusinessModulA(new Service2Inject());

businessModulA.work();
T1: create the instance of the Service
15
The Basics @SvenRuppert
BusinessModulA businessModulA 

= new BusinessModulA(new Service2Inject());

businessModulA.work();
T1: create the instance of the Service
T2: create the instance of the BusinessModul
15
The Basics @SvenRuppert
BusinessModulA businessModulA 

= new BusinessModulA(new Service2Inject());

businessModulA.work();
T1: create the instance of the Service
T2: create the instance of the BusinessModul
T3: method invoke
16
The Basics @SvenRuppert
final BusinessModulB businessModulB = new BusinessModulB();

businessModulB.setService(new Service2Inject());

businessModulB.work();
16
The Basics @SvenRuppert
final BusinessModulB businessModulB = new BusinessModulB();

businessModulB.setService(new Service2Inject());

businessModulB.work();
T1: create the instance of the BusinessModul
16
The Basics @SvenRuppert
final BusinessModulB businessModulB = new BusinessModulB();

businessModulB.setService(new Service2Inject());

businessModulB.work();
T1: create the instance of the BusinessModul
T2: create the instance of the Service
16
The Basics @SvenRuppert
final BusinessModulB businessModulB = new BusinessModulB();

businessModulB.setService(new Service2Inject());

businessModulB.work();
T1: create the instance of the BusinessModul
T2: create the instance of the Service
T3: set the Service
16
The Basics @SvenRuppert
final BusinessModulB businessModulB = new BusinessModulB();

businessModulB.setService(new Service2Inject());

businessModulB.work();
T1: create the instance of the BusinessModul
T2: create the instance of the Service
T3: set the Service
T4: invoke method
17
The Basics @SvenRuppert
final BusinessModulC businessModulC = new BusinessModulC();

try {

final Field serviceField = BusinessModulC.class

.getDeclaredField("service");

serviceField.set(businessModulC, new Service2Inject());

} catch (NoSuchFieldException | IllegalAccessException e) {

e.printStackTrace();

}

businessModulC.work();
17
The Basics @SvenRuppert
final BusinessModulC businessModulC = new BusinessModulC();

try {

final Field serviceField = BusinessModulC.class

.getDeclaredField("service");

serviceField.set(businessModulC, new Service2Inject());

} catch (NoSuchFieldException | IllegalAccessException e) {

e.printStackTrace();

}

businessModulC.work();
T1: create the instance of the BusinessModule
17
The Basics @SvenRuppert
final BusinessModulC businessModulC = new BusinessModulC();

try {

final Field serviceField = BusinessModulC.class

.getDeclaredField("service");

serviceField.set(businessModulC, new Service2Inject());

} catch (NoSuchFieldException | IllegalAccessException e) {

e.printStackTrace();

}

businessModulC.work();
T1: create the instance of the BusinessModule
T2: create the instance of the Service
17
The Basics @SvenRuppert
final BusinessModulC businessModulC = new BusinessModulC();

try {

final Field serviceField = BusinessModulC.class

.getDeclaredField("service");

serviceField.set(businessModulC, new Service2Inject());

} catch (NoSuchFieldException | IllegalAccessException e) {

e.printStackTrace();

}

businessModulC.work();
T1: create the instance of the BusinessModule
T2: create the instance of the Service
T3: set the Service
17
The Basics @SvenRuppert
final BusinessModulC businessModulC = new BusinessModulC();

try {

final Field serviceField = BusinessModulC.class

.getDeclaredField("service");

serviceField.set(businessModulC, new Service2Inject());

} catch (NoSuchFieldException | IllegalAccessException e) {

e.printStackTrace();

}

businessModulC.work();
T1: create the instance of the BusinessModule
T2: create the instance of the Service
T3: set the Service
T4: invoke method
Dependency Injection
18
@SvenRuppert
every framework will have a strategy how to
Dependency Injection
18
@SvenRuppert
every framework will have a strategy how to
resolve the Implementation
Dependency Injection
18
@SvenRuppert
every framework will have a strategy how to
resolve the Implementation
create/set the instance
Dependency Injection
18
@SvenRuppert
every framework will have a strategy how to
resolve the Implementation
create/set the instance
manage the timeline
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
@PostConstruct and @PreDestroy lifecycle callbacks
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
Interceptors and decorators
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
Interceptors and decorators
Stereotypes - combined Qualifier
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
Interceptors and decorators
Stereotypes - combined Qualifier
Events
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
Portable extension support
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
Interceptors and decorators
Stereotypes - combined Qualifier
Events
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
Portable extension support
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
Interceptors and decorators
Stereotypes - combined Qualifier
Events
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
Portable extension support
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
Interceptors and decorators
Stereotypes - combined Qualifier
Events
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
Portable extension support
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
Interceptors and decorators
Stereotypes - combined Qualifier
Events
A short view on WELD-SE - CDI
19
@SvenRuppert
website : http://weld.cdi-spec.org/
the following features are available ( SE )
Portable extension support
@PostConstruct and @PreDestroy lifecycle callbacks
Dependency injection with qualifiers and alternatives
@Application, @Dependent and @Singleton scopes
Interceptors and decorators
Stereotypes - combined Qualifier
Events
A short view on WELD-SE - CDI
20
@SvenRuppert
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceDefault;
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceDefault; OK
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceDefault;
public class Service_A implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
OK
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceDefault;
public class Service_A implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
WELD-001409: Ambiguous dependencies
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceDefault;
public class Service_A implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Prod
WELD-001409: Ambiguous dependencies
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceDefault;
public class Service_A implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Prod
OK
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceDefault;
public class Service_A implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Prod
@Inject @Prod Service serviceProd;
OK
A short view on WELD-SE - CDI
20
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

} public class ServiceDefault implements Service {

public String doWork(final String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceDefault;
public class Service_A implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Prod
@Inject @Prod Service serviceProd;
OK
A short view on WELD-SE - CDI
21
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
A short view on WELD-SE - CDI
21
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
public static class ServiceProducer{

@Produces @WithProducer

public Service create(){

return txt -> Service.class.getSimpleName() + " " + txt;

}

}
A short view on WELD-SE - CDI
21
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
public static class ServiceProducer{

@Produces @WithProducer

public Service create(){

return txt -> Service.class.getSimpleName() + " " + txt;

}

}
@Inject @WithProducer Service serviceProd;
A short view on WELD-SE - CDI
21
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
public static class ServiceProducer{

@Produces @WithProducer

public Service create(){

return txt -> Service.class.getSimpleName() + " " + txt;

}

}
@Inject @WithProducer Service serviceProd;
A short view on WELD-SE - CDI
21
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
public static class ServiceProducer{

@Produces @WithProducer

public Service create(){

return txt -> Service.class.getSimpleName() + " " + txt;

}

}
@Inject @WithProducer Service serviceProd;
A short view on WELD-SE - CDI
22
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
A short view on WELD-SE - CDI
22
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
@Alternative

public class ServiceAlternative implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
A short view on WELD-SE - CDI
22
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
@Alternative

public class ServiceAlternative implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceProd;
A short view on WELD-SE - CDI
22
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
@Alternative

public class ServiceAlternative implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceProd;
<beans ... >

<alternatives>

<class>org.rapidpm.ServiceAlternative</class>

</alternatives>

</beans>
A short view on WELD-SE - CDI
22
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
@Alternative

public class ServiceAlternative implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceProd;
<beans ... >

<alternatives>

<class>org.rapidpm.ServiceAlternative</class>

</alternatives>

</beans>
A short view on WELD-SE - CDI
22
@SvenRuppert
Dependency injection with qualifiers and alternatives
public interface Service {

String doWork(String txt);

}
@Alternative

public class ServiceAlternative implements Service {

@Override

public String doWork(String txt) {

return this.getClass().getSimpleName() + " " + txt;

}

}
@Inject Service serviceProd;
<beans ... >

<alternatives>

<class>org.rapidpm.ServiceAlternative</class>

</alternatives>

</beans>
A short view on WELD-SE - CDI
23
@SvenRuppert
Dependency injection with qualifiers and alternatives
A short view on WELD-SE - CDI
23
@SvenRuppert
Dependency injection with qualifiers and alternatives
@Inject Service service;
A short view on WELD-SE - CDI
23
@SvenRuppert
Dependency injection with qualifiers and alternatives
@Inject Service service;
Service service = container.select(Service.class).get();
A short view on WELD-SE - CDI
23
@SvenRuppert
Dependency injection with qualifiers and alternatives
@Inject Service service;
Service service = container.select(Service.class).get();
@Inject Instance<Service> serviceDefaultProxy;
A short view on WELD-SE - CDI
23
@SvenRuppert
Dependency injection with qualifiers and alternatives
@Inject Service service;
Service service = container.select(Service.class).get();
@Inject Instance<Service> serviceDefaultProxy;
Service serviceDevProxy = container

.instance()

.select(Service.class)

.select(new AnnotationLiteral<DEV>(){})

.get();
A short view on WELD-SE - CDI
23
@SvenRuppert
Dependency injection with qualifiers and alternatives
@Inject Service service;
@Inject @WithProducer Service serviceProd;
Service service = container.select(Service.class).get();
@Inject Instance<Service> serviceDefaultProxy;
Service serviceDevProxy = container

.instance()

.select(Service.class)

.select(new AnnotationLiteral<DEV>(){})

.get();
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service;
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
final Class aClass = t.getClass();
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
final Class aClass = t.getClass();
final BeanManager beanManager = CDI.current().getBeanManager();
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
final Class aClass = t.getClass();
final BeanManager beanManager = CDI.current().getBeanManager();
final AnnotatedType annotationType

= beanManager.createAnnotatedType(aClass);
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
final Class aClass = t.getClass();
final BeanManager beanManager = CDI.current().getBeanManager();
final AnnotatedType annotationType

= beanManager.createAnnotatedType(aClass);
final InjectionTarget injectionTarget

= beanManager.createInjectionTarget(annotationType);
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
final Class aClass = t.getClass();
final BeanManager beanManager = CDI.current().getBeanManager();
final AnnotatedType annotationType

= beanManager.createAnnotatedType(aClass);
final InjectionTarget injectionTarget

= beanManager.createInjectionTarget(annotationType);
final CreationalContext creationalContext

= beanManager.createCreationalContext(null);

A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
final Class aClass = t.getClass();
final BeanManager beanManager = CDI.current().getBeanManager();
final AnnotatedType annotationType

= beanManager.createAnnotatedType(aClass);
final InjectionTarget injectionTarget

= beanManager.createInjectionTarget(annotationType);
final CreationalContext creationalContext

= beanManager.createCreationalContext(null);

injectionTarget.inject(t, creationalContext);
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
public <T> T activateCDI(T t) {
final Class aClass = t.getClass();
final BeanManager beanManager = CDI.current().getBeanManager();
final AnnotatedType annotationType

= beanManager.createAnnotatedType(aClass);
final InjectionTarget injectionTarget

= beanManager.createInjectionTarget(annotationType);
final CreationalContext creationalContext

= beanManager.createCreationalContext(null);

injectionTarget.inject(t, creationalContext);
injectionTarget.postConstruct(t);
A short view on WELD-SE - CDI
24
@SvenRuppert
programmatically injection
@Inject Service service; Service service = container.select(Service.class).get();
return t;

}
public <T> T activateCDI(T t) {
final Class aClass = t.getClass();
final BeanManager beanManager = CDI.current().getBeanManager();
final AnnotatedType annotationType

= beanManager.createAnnotatedType(aClass);
final InjectionTarget injectionTarget

= beanManager.createInjectionTarget(annotationType);
final CreationalContext creationalContext

= beanManager.createCreationalContext(null);

injectionTarget.inject(t, creationalContext);
injectionTarget.postConstruct(t);
BoonDI - Project bootstrapping
25
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
BoonDI - Project bootstrapping
25
@SvenRuppert
<dependency>

<groupId>io.fastjson</groupId>

<artifactId>boon</artifactId>

<version>0.33</version>

</dependency>
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
BoonDI - Project bootstrapping
25
@SvenRuppert
<dependency>

<groupId>javax.enterprise</groupId>

<artifactId>cdi-api</artifactId>

<version>1.2</version>

</dependency>

<dependency>

<groupId>io.fastjson</groupId>

<artifactId>boon</artifactId>

<version>0.33</version>

</dependency>
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
@In (old from Seam)
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
@PostConstruct @In (old from Seam)
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
@PostConstruct @In (old from Seam)
@Autowired (from Spring)
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
@PostConstruct
@Inject
@In (old from Seam)
@Autowired (from Spring)
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
@PostConstruct
@Inject
@Named
@In (old from Seam)
@Autowired (from Spring)
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
@PostConstruct
@Inject
@Named
@In (old from Seam)
@Autowired (from Spring)
@Required (from Spring)
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
@PostConstruct
@Inject
@Named
@In (old from Seam)
@Autowired (from Spring)
@Required (from Spring)
@Qualifier (from Spring)
BoonDI - not a replacement for …..
26
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
@PostConstruct
@Inject
@Named
@In (old from Seam)
@Autowired (from Spring)
@Required (from Spring)
@Qualifier (from Spring)
no Scopes
BoonDI - not a replacement for …..
27
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
Boon is not using
- AnnotationProcessing
- ByteCode - Manipulation
BoonDI - not a replacement for …..
27
@SvenRuppert
website : 

https://github.com/boonproject/boon/wiki/Boon-DI
Boon is not using
- AnnotationProcessing
- ByteCode - Manipulation
OK, this will lead
to Reflection or?
28
BoonDI - Hello World @SvenRuppert
28
BoonDI - Hello World @SvenRuppert
public class Service {



@Inject SubService subService;



@PostConstruct

public void printInfoPostconstruct() {

System.out.println("printInfoPostconstruct() "

+ this.getClass().getSimpleName());

}

}
28
BoonDI - Hello World @SvenRuppert
public class Service {



@Inject SubService subService;



@PostConstruct

public void printInfoPostconstruct() {

System.out.println("printInfoPostconstruct() "

+ this.getClass().getSimpleName());

}

}
public class SubService {

@PostConstruct

public void printInfoPostconstruct() {

System.out.println("printInfoPostconstruct() "

+ this.getClass().getSimpleName());

}

}
29
BoonDI - Hello World @SvenRuppert
29
BoonDI - Hello World @SvenRuppert
29
BoonDI - Hello World @SvenRuppert
29
BoonDI - Hello World @SvenRuppert
29
BoonDI - Hello World @SvenRuppert
final Module module = DependencyInjection.classes(Service.class);
29
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
30
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
30
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
SubService == null
30
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
SubService == null
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
30
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
SubService == null
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
final Context context = DependencyInjection.context(module);
30
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
SubService == null
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
30
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
SubService == null
SubService != null
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
30
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
SubService == null
SubService != null
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
30
BoonDI - Hello World @SvenRuppert
final Service service1 = module.get(Service.class);
final Module module = DependencyInjection.classes(Service.class);
SubService == null
SubService != null
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
31
BoonDI - Hello World @SvenRuppert
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
31
BoonDI - Hello World @SvenRuppert
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
public class ServiceModule {





}
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
31
BoonDI - Hello World @SvenRuppert
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
public class ServiceModule {





}
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
public Service provideService(){ return new Service(); }
31
BoonDI - Hello World @SvenRuppert
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
public class ServiceModule {





}
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
31
BoonDI - Hello World @SvenRuppert
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
public class ServiceModule {





}
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
final Module module = DependencyInjection

.module(new ServiceModule());
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
31
BoonDI - Hello World @SvenRuppert
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
public class ServiceModule {





}
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
final Context context = DependencyInjection.context(module);
final Module module = DependencyInjection

.module(new ServiceModule());
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
31
BoonDI - Hello World @SvenRuppert
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
public class ServiceModule {





}
final Module module = DependencyInjection

.classes(Service.class, SubService.class);
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
final Module module = DependencyInjection

.module(new ServiceModule());
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
32
BoonDI - Hello World @SvenRuppert
public class ServiceModule {





}
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
final Module module = DependencyInjection

.module(new ServiceModule());
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
32
BoonDI - Hello World @SvenRuppert
public class ServiceModule {





}
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
final Module module = DependencyInjection

.module(new ServiceModule());
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
32
BoonDI - Hello World @SvenRuppert
public class ServiceModule {





}
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
final Module module = DependencyInjection

.module(new ServiceModule());
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
32
BoonDI - Hello World @SvenRuppert
public class ServiceModule {





}
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
final Module module = DependencyInjection

.module(new ServiceModule());
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
naming conventions
32
BoonDI - Hello World @SvenRuppert
public class ServiceModule {





}
final Context context = DependencyInjection.context(module);
final Service service2 = context.get(Service.class);
final Module module = DependencyInjection

.module(new ServiceModule());
public Service provideService(){ return new Service(); }
public SubService provideSubService() { return new SubService(); }
naming conventions
not refactoring safe
33
BoonDI - Modules @SvenRuppert
at runtime you can
addModule() removeModule()
34
BoonDI - Modules - be careful :-) @SvenRuppert
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
public Service provideServiceA() { out.println("provideServiceBA ...");
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
public Service provideServiceA() { out.println("provideServiceBA ...");
public Service provideServiceB() { out.println("provideServiceBB ...");
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
public Service provideServiceA() { out.println("provideServiceBA ...");
public Service provideServiceB() { out.println("provideServiceBB ...");
public Service provideServiceC() { out.println("provideServiceBC ...");
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
public Service provideServiceA() { out.println("provideServiceBA ...");
public Service provideServiceB() { out.println("provideServiceBB ...");
public Service provideServiceC() { out.println("provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
public Service provideServiceA() { out.println("provideServiceBA ...");
public Service provideServiceB() { out.println("provideServiceBB ...");
public Service provideServiceC() { out.println("provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
public Service provideServiceA() { out.println("provideServiceBA ...");
public Service provideServiceB() { out.println("provideServiceBB ...");
public Service provideServiceC() { out.println("provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
public Service provideServiceA() { out.println("provideServiceBA ...");
public Service provideServiceB() { out.println("provideServiceBB ...");
public Service provideServiceC() { out.println("provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
34
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA {
public Service provideServiceA() { out.println("provideServiceAA ...");
public Service provideServiceB() { out.println("provideServiceAB ...");
public Service provideServiceC() { out.println("provideServiceAC ...");
public class ServiceModuleB {
public Service provideServiceA() { out.println("provideServiceBA ...");
public Service provideServiceB() { out.println("provideServiceBB ...");
public Service provideServiceC() { out.println("provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class);
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
final Context add = context.add(moduleB);
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
final Context add = context.add(moduleB);
context.get(Service.class);
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
final Context add = context.add(moduleB);
context.get(Service.class); provideServiceAB
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
final Context add = context.add(moduleB);
context.get(Service.class);
add.get(Service.class);
provideServiceAB
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
final Context add = context.add(moduleB);
context.get(Service.class);
add.get(Service.class);
provideServiceAB
provideServiceAB
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
final Context add = context.add(moduleB);
context.get(Service.class);
add.get(Service.class);
provideServiceAB
provideServiceAB
final Context context = DependencyInjection.context(moduleA,moduleB);
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
final Context add = context.add(moduleB);
context.get(Service.class);
add.get(Service.class);
provideServiceAB
provideServiceAB
final Context context = DependencyInjection.context(moduleA,moduleB);
context.get(Service.class);
35
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleA);
context.get(Service.class); provideServiceAB
final Context add = context.add(moduleB);
context.get(Service.class);
add.get(Service.class);
provideServiceAB
provideServiceAB
final Context context = DependencyInjection.context(moduleA,moduleB);
context.get(Service.class); provideServiceAB
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class);
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
context.get(Service.class);
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
context.get(Service.class); provideServiceBB
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
context.get(Service.class);
add.get(Service.class);
provideServiceBB
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
context.get(Service.class);
add.get(Service.class);
provideServiceBB
provideServiceBB
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
context.get(Service.class);
add.get(Service.class);
provideServiceBB
provideServiceBB
final Context context = DependencyInjection.context(moduleB,moduleA);
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
context.get(Service.class);
add.get(Service.class);
provideServiceBB
provideServiceBB
final Context context = DependencyInjection.context(moduleB,moduleA);
context.get(Service.class);
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
context.get(Service.class);
add.get(Service.class);
provideServiceBB
provideServiceBB
final Context context = DependencyInjection.context(moduleB,moduleA);
context.get(Service.class); provideServiceBB
36
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ...");
public Service provideServiceB() {"provideServiceAB ...");
public Service provideServiceC() {"provideServiceAC ...");
public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ...");
public Service provideServiceB() { "provideServiceBB ...");
public Service provideServiceC() {"provideServiceBC ...");
final Module moduleA = DependencyInjection.module(new ServiceModuleA());

final Module moduleB = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection.context(moduleB);
context.get(Service.class); provideServiceBB
final Context add = context.add(moduleA);
context.get(Service.class);
add.get(Service.class);
provideServiceBB
provideServiceBB
final Context context = DependencyInjection.context(moduleB,moduleA);
context.get(Service.class); provideServiceBB
So far so good….
but what could
happen??
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1)
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2)
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class); provideServiceAB
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
context.remove(moduleA1);
provideServiceAB
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
context.remove(moduleA1); context.get(Service.class);
provideServiceAB
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
context.remove(moduleA1); context.get(Service.class);
provideServiceAB
provideServiceBB
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
context.remove(moduleA1); context.get(Service.class);
context.remove(moduleB1);
provideServiceAB
provideServiceBB
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
context.remove(moduleA1); context.get(Service.class);
context.remove(moduleB1); context.get(Service.class);
provideServiceAB
provideServiceBB
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
context.remove(moduleA1); context.get(Service.class);
context.remove(moduleB1); context.get(Service.class);
provideServiceAB
provideServiceBB
provideServiceAB
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
context.remove(moduleA1); context.get(Service.class);
context.remove(moduleB1); context.get(Service.class);
context.remove(moduleA2);
provideServiceAB
provideServiceBB
provideServiceAB
37
BoonDI - Modules - be careful :-) @SvenRuppert
public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ...");
public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
final Context context = DependencyInjection
.context(moduleA1).context(moduleB1)
.context(moduleA2).context(moduleB2);
context.get(Service.class);
context.remove(moduleA1); context.get(Service.class);
context.remove(moduleB1); context.get(Service.class);
context.remove(moduleA2); context.get(Service.class);
provideServiceAB
provideServiceBB
provideServiceAB
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls
DI Frameworks - hidden pearls

Contenu connexe

Tendances

Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Ganesh Samarthyam
 
Java SE 8 for Java EE developers
Java SE 8 for Java EE developersJava SE 8 for Java EE developers
Java SE 8 for Java EE developersJosé Paumard
 
Creating Lazy stream in CSharp
Creating Lazy stream in CSharpCreating Lazy stream in CSharp
Creating Lazy stream in CSharpDhaval Dalal
 
Building Maintainable Applications in Apex
Building Maintainable Applications in ApexBuilding Maintainable Applications in Apex
Building Maintainable Applications in ApexJeffrey Kemp
 
Porting Applications From Oracle To PostgreSQL
Porting Applications From Oracle To PostgreSQLPorting Applications From Oracle To PostgreSQL
Porting Applications From Oracle To PostgreSQLPeter Eisentraut
 
Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech TalkRefactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech TalkCodeOps Technologies LLP
 
PHP 8: What's New and Changed
PHP 8: What's New and ChangedPHP 8: What's New and Changed
PHP 8: What's New and ChangedAyesh Karunaratne
 
What's new in Scala 2.13?
What's new in Scala 2.13?What's new in Scala 2.13?
What's new in Scala 2.13?Hermann Hueck
 
Why You Should Use TAPIs
Why You Should Use TAPIsWhy You Should Use TAPIs
Why You Should Use TAPIsJeffrey Kemp
 
Java7 New Features and Code Examples
Java7 New Features and Code ExamplesJava7 New Features and Code Examples
Java7 New Features and Code ExamplesNaresh Chintalcheru
 
JAX-RS and CDI Bike the (Reactive) Bridge
JAX-RS and CDI Bike the (Reactive) BridgeJAX-RS and CDI Bike the (Reactive) Bridge
JAX-RS and CDI Bike the (Reactive) BridgeJosé Paumard
 

Tendances (20)

Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams
 
Sailing with Java 8 Streams
Sailing with Java 8 StreamsSailing with Java 8 Streams
Sailing with Java 8 Streams
 
Java SE 8 for Java EE developers
Java SE 8 for Java EE developersJava SE 8 for Java EE developers
Java SE 8 for Java EE developers
 
Java 5 and 6 New Features
Java 5 and 6 New FeaturesJava 5 and 6 New Features
Java 5 and 6 New Features
 
Creating Lazy stream in CSharp
Creating Lazy stream in CSharpCreating Lazy stream in CSharp
Creating Lazy stream in CSharp
 
Building Maintainable Applications in Apex
Building Maintainable Applications in ApexBuilding Maintainable Applications in Apex
Building Maintainable Applications in Apex
 
Java 7 New Features
Java 7 New FeaturesJava 7 New Features
Java 7 New Features
 
Completable future
Completable futureCompletable future
Completable future
 
Porting Applications From Oracle To PostgreSQL
Porting Applications From Oracle To PostgreSQLPorting Applications From Oracle To PostgreSQL
Porting Applications From Oracle To PostgreSQL
 
Refactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech TalkRefactoring for Software Design Smells - Tech Talk
Refactoring for Software Design Smells - Tech Talk
 
PHP 8: What's New and Changed
PHP 8: What's New and ChangedPHP 8: What's New and Changed
PHP 8: What's New and Changed
 
PHP 7
PHP 7PHP 7
PHP 7
 
What's new in Scala 2.13?
What's new in Scala 2.13?What's new in Scala 2.13?
What's new in Scala 2.13?
 
Laravel 5.5 dev
Laravel 5.5 devLaravel 5.5 dev
Laravel 5.5 dev
 
Second Level Cache in JPA Explained
Second Level Cache in JPA ExplainedSecond Level Cache in JPA Explained
Second Level Cache in JPA Explained
 
Why You Should Use TAPIs
Why You Should Use TAPIsWhy You Should Use TAPIs
Why You Should Use TAPIs
 
Java7 New Features and Code Examples
Java7 New Features and Code ExamplesJava7 New Features and Code Examples
Java7 New Features and Code Examples
 
55 New Features in Java 7
55 New Features in Java 755 New Features in Java 7
55 New Features in Java 7
 
Java after 8
Java after 8Java after 8
Java after 8
 
JAX-RS and CDI Bike the (Reactive) Bridge
JAX-RS and CDI Bike the (Reactive) BridgeJAX-RS and CDI Bike the (Reactive) Bridge
JAX-RS and CDI Bike the (Reactive) Bridge
 

En vedette

Fyronic seminar-software factorymeeting-sls
Fyronic seminar-software factorymeeting-slsFyronic seminar-software factorymeeting-sls
Fyronic seminar-software factorymeeting-slsFranky Redant
 
Colaboración y Negocios Web 20
Colaboración y Negocios Web 20Colaboración y Negocios Web 20
Colaboración y Negocios Web 20Emprende Futuro
 
Top 20 TV Online PC-Movil por Garritz Media Online
Top 20 TV Online PC-Movil por Garritz Media OnlineTop 20 TV Online PC-Movil por Garritz Media Online
Top 20 TV Online PC-Movil por Garritz Media OnlineIAB México
 
Comunicado Numero 1 CIMI
Comunicado Numero 1 CIMIComunicado Numero 1 CIMI
Comunicado Numero 1 CIMIDesarrollo Sena
 
Creative that cracks the code applied to indian market - Group 6
Creative that cracks the code applied to indian market - Group 6Creative that cracks the code applied to indian market - Group 6
Creative that cracks the code applied to indian market - Group 6Sameer Mathur
 
Teatro romano de Zaragoza. Cristina Valero (2º bach.)
Teatro romano de Zaragoza. Cristina Valero (2º bach.)Teatro romano de Zaragoza. Cristina Valero (2º bach.)
Teatro romano de Zaragoza. Cristina Valero (2º bach.)humanidadescolapias
 
Despierta Papa Despierta
Despierta Papa DespiertaDespierta Papa Despierta
Despierta Papa Despiertaguesta7eb4a
 
México 1968 orígenes de la transición Soledad Loaeza
México 1968 orígenes de la transición Soledad LoaezaMéxico 1968 orígenes de la transición Soledad Loaeza
México 1968 orígenes de la transición Soledad LoaezaMarco González
 
Conclusiones del Primer Foro de Industrias Culturales de Entre Ríos
Conclusiones del Primer Foro de Industrias Culturales de Entre RíosConclusiones del Primer Foro de Industrias Culturales de Entre Ríos
Conclusiones del Primer Foro de Industrias Culturales de Entre RíosSebastián Lorenzo
 
SEO para Wordpress
SEO para WordpressSEO para Wordpress
SEO para WordpressClinic Seo
 
SIIE16. Proyecto eMadrid: Juegos Serios y Simulaciones Educativas. Manuel Fre...
SIIE16. Proyecto eMadrid: Juegos Serios y Simulaciones Educativas. Manuel Fre...SIIE16. Proyecto eMadrid: Juegos Serios y Simulaciones Educativas. Manuel Fre...
SIIE16. Proyecto eMadrid: Juegos Serios y Simulaciones Educativas. Manuel Fre...eMadrid network
 
Memoria bomberos 2012
Memoria bomberos 2012Memoria bomberos 2012
Memoria bomberos 2012Roberto Caro
 
Adaptive Selection in Evolutionary Algorithm thesis
Adaptive Selection in Evolutionary Algorithm thesisAdaptive Selection in Evolutionary Algorithm thesis
Adaptive Selection in Evolutionary Algorithm thesisRiyad Parvez
 
Astrónomos y astrólogos
Astrónomos y astrólogosAstrónomos y astrólogos
Astrónomos y astrólogosPilar Muñoz
 
Do you know about what you believe in? Christian bible test
Do you know about what you believe in?  Christian bible test Do you know about what you believe in?  Christian bible test
Do you know about what you believe in? Christian bible test Aurora Ute
 
Plano marketing telexfree
Plano marketing telexfreePlano marketing telexfree
Plano marketing telexfreeSergio Santos
 

En vedette (20)

LA CRÓNICA 636
LA CRÓNICA 636LA CRÓNICA 636
LA CRÓNICA 636
 
Fyronic seminar-software factorymeeting-sls
Fyronic seminar-software factorymeeting-slsFyronic seminar-software factorymeeting-sls
Fyronic seminar-software factorymeeting-sls
 
Colaboración y Negocios Web 20
Colaboración y Negocios Web 20Colaboración y Negocios Web 20
Colaboración y Negocios Web 20
 
Top 20 TV Online PC-Movil por Garritz Media Online
Top 20 TV Online PC-Movil por Garritz Media OnlineTop 20 TV Online PC-Movil por Garritz Media Online
Top 20 TV Online PC-Movil por Garritz Media Online
 
Comunicado Numero 1 CIMI
Comunicado Numero 1 CIMIComunicado Numero 1 CIMI
Comunicado Numero 1 CIMI
 
Creative that cracks the code applied to indian market - Group 6
Creative that cracks the code applied to indian market - Group 6Creative that cracks the code applied to indian market - Group 6
Creative that cracks the code applied to indian market - Group 6
 
Felicitación navidad 2013
Felicitación navidad 2013Felicitación navidad 2013
Felicitación navidad 2013
 
Teatro romano de Zaragoza. Cristina Valero (2º bach.)
Teatro romano de Zaragoza. Cristina Valero (2º bach.)Teatro romano de Zaragoza. Cristina Valero (2º bach.)
Teatro romano de Zaragoza. Cristina Valero (2º bach.)
 
Despierta Papa Despierta
Despierta Papa DespiertaDespierta Papa Despierta
Despierta Papa Despierta
 
Present redes lvg
Present redes lvgPresent redes lvg
Present redes lvg
 
México 1968 orígenes de la transición Soledad Loaeza
México 1968 orígenes de la transición Soledad LoaezaMéxico 1968 orígenes de la transición Soledad Loaeza
México 1968 orígenes de la transición Soledad Loaeza
 
Building TV apps with Chromecast
Building TV apps with ChromecastBuilding TV apps with Chromecast
Building TV apps with Chromecast
 
Conclusiones del Primer Foro de Industrias Culturales de Entre Ríos
Conclusiones del Primer Foro de Industrias Culturales de Entre RíosConclusiones del Primer Foro de Industrias Culturales de Entre Ríos
Conclusiones del Primer Foro de Industrias Culturales de Entre Ríos
 
SEO para Wordpress
SEO para WordpressSEO para Wordpress
SEO para Wordpress
 
SIIE16. Proyecto eMadrid: Juegos Serios y Simulaciones Educativas. Manuel Fre...
SIIE16. Proyecto eMadrid: Juegos Serios y Simulaciones Educativas. Manuel Fre...SIIE16. Proyecto eMadrid: Juegos Serios y Simulaciones Educativas. Manuel Fre...
SIIE16. Proyecto eMadrid: Juegos Serios y Simulaciones Educativas. Manuel Fre...
 
Memoria bomberos 2012
Memoria bomberos 2012Memoria bomberos 2012
Memoria bomberos 2012
 
Adaptive Selection in Evolutionary Algorithm thesis
Adaptive Selection in Evolutionary Algorithm thesisAdaptive Selection in Evolutionary Algorithm thesis
Adaptive Selection in Evolutionary Algorithm thesis
 
Astrónomos y astrólogos
Astrónomos y astrólogosAstrónomos y astrólogos
Astrónomos y astrólogos
 
Do you know about what you believe in? Christian bible test
Do you know about what you believe in?  Christian bible test Do you know about what you believe in?  Christian bible test
Do you know about what you believe in? Christian bible test
 
Plano marketing telexfree
Plano marketing telexfreePlano marketing telexfree
Plano marketing telexfree
 

Similaire à DI Frameworks - hidden pearls

Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015Lukas Ruebbelke
 
모던자바의 역습
모던자바의 역습모던자바의 역습
모던자바의 역습DoHyun Jung
 
can you add a delete button and a add button to the below program. j.pdf
can you add a delete button and a add button to the below program. j.pdfcan you add a delete button and a add button to the below program. j.pdf
can you add a delete button and a add button to the below program. j.pdfsales88
 
Java Generics
Java GenericsJava Generics
Java Genericsjeslie
 
Labprogram.javaLinkedList.javaimport java.util.NoSuchElementEx.pdf
Labprogram.javaLinkedList.javaimport java.util.NoSuchElementEx.pdfLabprogram.javaLinkedList.javaimport java.util.NoSuchElementEx.pdf
Labprogram.javaLinkedList.javaimport java.util.NoSuchElementEx.pdffreddysarabia1
 
So I have this code(StackInAllSocks) and I implemented the method but.pdf
So I have this code(StackInAllSocks) and I implemented the method but.pdfSo I have this code(StackInAllSocks) and I implemented the method but.pdf
So I have this code(StackInAllSocks) and I implemented the method but.pdfaksahnan
 
Xebicon2013 scala vsjava_final
Xebicon2013 scala vsjava_finalXebicon2013 scala vsjava_final
Xebicon2013 scala vsjava_finalUrs Peter
 
9781111530532 ppt ch09
9781111530532 ppt ch099781111530532 ppt ch09
9781111530532 ppt ch09Terry Yoast
 
package singlylinkedlist; public class Node { public String valu.pdf
package singlylinkedlist; public class Node { public String valu.pdfpackage singlylinkedlist; public class Node { public String valu.pdf
package singlylinkedlist; public class Node { public String valu.pdfamazing2001
 
ASP.Net 5 and C# 6
ASP.Net 5 and C# 6ASP.Net 5 and C# 6
ASP.Net 5 and C# 6Andy Butland
 
Evolving with Java - How to Remain Effective
Evolving with Java - How to Remain EffectiveEvolving with Java - How to Remain Effective
Evolving with Java - How to Remain EffectiveNaresha K
 
for String name likedBy String like.pdf
for String name  likedBy                     String like.pdffor String name  likedBy                     String like.pdf
for String name likedBy String like.pdfsachinactivepower
 
Java™ (OOP) - Chapter 6: "Arrays"
Java™ (OOP) - Chapter 6: "Arrays"Java™ (OOP) - Chapter 6: "Arrays"
Java™ (OOP) - Chapter 6: "Arrays"Gouda Mando
 
HELP IN JAVACreate a main method and use these input files to tes.pdf
HELP IN JAVACreate a main method and use these input files to tes.pdfHELP IN JAVACreate a main method and use these input files to tes.pdf
HELP IN JAVACreate a main method and use these input files to tes.pdffatoryoutlets
 

Similaire à DI Frameworks - hidden pearls (20)

Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015
 
모던자바의 역습
모던자바의 역습모던자바의 역습
모던자바의 역습
 
can you add a delete button and a add button to the below program. j.pdf
can you add a delete button and a add button to the below program. j.pdfcan you add a delete button and a add button to the below program. j.pdf
can you add a delete button and a add button to the below program. j.pdf
 
Java Generics
Java GenericsJava Generics
Java Generics
 
Labprogram.javaLinkedList.javaimport java.util.NoSuchElementEx.pdf
Labprogram.javaLinkedList.javaimport java.util.NoSuchElementEx.pdfLabprogram.javaLinkedList.javaimport java.util.NoSuchElementEx.pdf
Labprogram.javaLinkedList.javaimport java.util.NoSuchElementEx.pdf
 
So I have this code(StackInAllSocks) and I implemented the method but.pdf
So I have this code(StackInAllSocks) and I implemented the method but.pdfSo I have this code(StackInAllSocks) and I implemented the method but.pdf
So I have this code(StackInAllSocks) and I implemented the method but.pdf
 
Array list
Array listArray list
Array list
 
Spring data jpa simple example_스프링학원/자바학원추천/구로IT학원/자바학원
Spring data jpa simple example_스프링학원/자바학원추천/구로IT학원/자바학원Spring data jpa simple example_스프링학원/자바학원추천/구로IT학원/자바학원
Spring data jpa simple example_스프링학원/자바학원추천/구로IT학원/자바학원
 
Xebicon2013 scala vsjava_final
Xebicon2013 scala vsjava_finalXebicon2013 scala vsjava_final
Xebicon2013 scala vsjava_final
 
9781111530532 ppt ch09
9781111530532 ppt ch099781111530532 ppt ch09
9781111530532 ppt ch09
 
Java Collections
Java CollectionsJava Collections
Java Collections
 
package singlylinkedlist; public class Node { public String valu.pdf
package singlylinkedlist; public class Node { public String valu.pdfpackage singlylinkedlist; public class Node { public String valu.pdf
package singlylinkedlist; public class Node { public String valu.pdf
 
ASP.Net 5 and C# 6
ASP.Net 5 and C# 6ASP.Net 5 and C# 6
ASP.Net 5 and C# 6
 
Java Generics
Java GenericsJava Generics
Java Generics
 
Evolving with Java - How to Remain Effective
Evolving with Java - How to Remain EffectiveEvolving with Java - How to Remain Effective
Evolving with Java - How to Remain Effective
 
for String name likedBy String like.pdf
for String name  likedBy                     String like.pdffor String name  likedBy                     String like.pdf
for String name likedBy String like.pdf
 
Java Collections Tutorials
Java Collections TutorialsJava Collections Tutorials
Java Collections Tutorials
 
Java™ (OOP) - Chapter 6: "Arrays"
Java™ (OOP) - Chapter 6: "Arrays"Java™ (OOP) - Chapter 6: "Arrays"
Java™ (OOP) - Chapter 6: "Arrays"
 
HELP IN JAVACreate a main method and use these input files to tes.pdf
HELP IN JAVACreate a main method and use these input files to tes.pdfHELP IN JAVACreate a main method and use these input files to tes.pdf
HELP IN JAVACreate a main method and use these input files to tes.pdf
 
Groovy
GroovyGroovy
Groovy
 

Plus de Sven Ruppert

JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06Sven Ruppert
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceSven Ruppert
 
Vaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java DevsVaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java DevsSven Ruppert
 
Functional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed MelbourneFunctional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed MelbourneSven Ruppert
 
Functional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - SlidesFunctional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - SlidesSven Ruppert
 
Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001Sven Ruppert
 
From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017Sven Ruppert
 
From Jurassic Park to Microservices
From Jurassic Park to MicroservicesFrom Jurassic Park to Microservices
From Jurassic Park to MicroservicesSven Ruppert
 
From jUnit to Mutationtesting
From jUnit to MutationtestingFrom jUnit to Mutationtesting
From jUnit to MutationtestingSven Ruppert
 
Warum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheWarum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheSven Ruppert
 
Java8 ready for the future
Java8 ready for the futureJava8 ready for the future
Java8 ready for the futureSven Ruppert
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDISven Ruppert
 
Java FX8 JumpStart - JUG ch - zürich
Java FX8   JumpStart - JUG ch - zürichJava FX8   JumpStart - JUG ch - zürich
Java FX8 JumpStart - JUG ch - zürichSven Ruppert
 
Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02Sven Ruppert
 
Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015Sven Ruppert
 

Plus de Sven Ruppert (15)

JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06JUnit5 Custom TestEngines intro - version 2020-06
JUnit5 Custom TestEngines intro - version 2020-06
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-Persistence
 
Vaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java DevsVaadin Flow - How to start - a short intro for Java Devs
Vaadin Flow - How to start - a short intro for Java Devs
 
Functional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed MelbourneFunctional Reactive With Core Java - Voxxed Melbourne
Functional Reactive With Core Java - Voxxed Melbourne
 
Functional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - SlidesFunctional Reactive with Core Java - Workshop - Slides
Functional Reactive with Core Java - Workshop - Slides
 
Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001Functional reactive-talk 20170301-001
Functional reactive-talk 20170301-001
 
From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017From Mess To Masterpiece - JFokus 2017
From Mess To Masterpiece - JFokus 2017
 
From Jurassic Park to Microservices
From Jurassic Park to MicroservicesFrom Jurassic Park to Microservices
From Jurassic Park to Microservices
 
From jUnit to Mutationtesting
From jUnit to MutationtestingFrom jUnit to Mutationtesting
From jUnit to Mutationtesting
 
Warum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheWarum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi stehe
 
Java8 ready for the future
Java8 ready for the futureJava8 ready for the future
Java8 ready for the future
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDI
 
Java FX8 JumpStart - JUG ch - zürich
Java FX8   JumpStart - JUG ch - zürichJava FX8   JumpStart - JUG ch - zürich
Java FX8 JumpStart - JUG ch - zürich
 
Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02Proxy Deep Dive JUG Saxony Day 2015-10-02
Proxy Deep Dive JUG Saxony Day 2015-10-02
 
Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015Proxy Deep Dive Voxxed Belgrad 2015
Proxy Deep Dive Voxxed Belgrad 2015
 

Dernier

Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Anthony Dahanne
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 

Dernier (20)

Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024Not a Kubernetes fan? The state of PaaS in 2024
Not a Kubernetes fan? The state of PaaS in 2024
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 

DI Frameworks - hidden pearls

  • 1. prepare for… DI - Frameworks ..some hidden pearls
  • 2. @SvenRuppert has been coding java since 1996 Head of R&D / Fellow reply Germany - Munich 2
  • 3. @SvenRuppert has been coding java since 1996 3
  • 4. @SvenRuppert has been coding java since 1996 Projects in the field of: •Automobile-industry •Energy •Finance / Leasing •Space- Satellit- •Government / UN / World-bank Where? •Europe •Asia - from India up to Malaysia 3
  • 6. 4 Save harbor statement The following is intended for information purposes only. I can not be held responsible for the overuse of effects and animations in this presentation. If any person in this room has a medical condition that is triggered by fast moving objects on the screen and/or explosions, he/she should probably better leave now… (I got carried away by the topic.)
  • 8. 5 The Basics @SvenRuppert targets we want to reach divide a system into modules
  • 9. 5 The Basics @SvenRuppert targets we want to reach divide a system into modules decouple contract and implementations
  • 10. 5 The Basics @SvenRuppert targets we want to reach divide a system into modules decouple contract and implementations decrease complexity
  • 11. 5 The Basics @SvenRuppert targets we want to reach divide a system into modules decouple contract and implementations decrease complexity but… lets start with the basics
  • 13. 6 The Basics @SvenRuppert public List<Data> execute() { //.... return result; }
  • 14. 6 The Basics @SvenRuppert public List<Data> execute() { //.... return result; } import java.util.List;
  • 15. 6 The Basics @SvenRuppert public List<Data> execute() { //.... return result; } import java.util.List; final List<Data> result = new ArrayList<>();
  • 16. 6 The Basics @SvenRuppert public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>();
  • 17. 6 The Basics @SvenRuppert public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); if we don´t need a method like trimToSize()
  • 18. 6 The Basics @SvenRuppert public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); if we don´t need a method like trimToSize() we want to get rid of the dep. ArrayList
  • 19. 6 The Basics @SvenRuppert public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); if we don´t need a method like trimToSize() we want to get rid of the dep. ArrayList
  • 20. 7 The Basics @SvenRuppert import java.util.List; import java.util.ArrayList; if we don´t need a method like trimToSize() we want to get rid of the dep. ArrayList this will lead to some questions
  • 21. 7 The Basics @SvenRuppert import java.util.List; import java.util.ArrayList; if we don´t need a method like trimToSize() we want to get rid of the dep. ArrayList this will lead to some questions what will be the right Implementation?
  • 22. 7 The Basics @SvenRuppert import java.util.List; import java.util.ArrayList; if we don´t need a method like trimToSize() we want to get rid of the dep. ArrayList this will lead to some questions what will be the right Implementation? what is the right time to decide?
  • 23. 7 The Basics @SvenRuppert import java.util.List; import java.util.ArrayList; if we don´t need a method like trimToSize() we want to get rid of the dep. ArrayList this will lead to some questions what will be the right Implementation? what is the right time to decide? what is the right freq. to decide?
  • 24. 8 The Basics @SvenRuppert import java.util.List; import java.util.ArrayList; if we don´t need a method like trimToSize() we want to get rid of the dep. ArrayList this will lead to some questions what will be the right Implementation? what is the right time to decide? what is the right freq. to decide?
  • 25. 8 The Basics @SvenRuppert what will be the right Implementation?
  • 26. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE
  • 27. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 }
  • 28. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } import java.util.List;
  • 29. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } import java.util.List;
  • 30. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } final List arrayList = createArrayList(); import java.util.List;
  • 31. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } final List arrayList = createArrayList(); import java.util.ArrayList; import java.util.List;
  • 32. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } final List arrayList = createArrayList(); import java.util.ArrayList; import java.util.List;
  • 33. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } final List arrayList = createArrayList(); final List linkedList = createLinkedList(); import java.util.ArrayList; import java.util.List;
  • 34. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } final List arrayList = createArrayList(); final List linkedList = createLinkedList(); import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
  • 35. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } public static List createList() { return new ArrayList(); } final List arrayList = createArrayList(); final List linkedList = createLinkedList(); import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
  • 36. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } public static List createList() { return new ArrayList(); } final List arrayList = createArrayList(); final List linkedList = createLinkedList(); final List list = createList(); import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
  • 37. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } public static List createList() { return new ArrayList(); } final List arrayList = createArrayList(); final List linkedList = createLinkedList(); final List list = createList(); import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
  • 38. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } public static List createList() { return new ArrayList(); } final List arrayList = createArrayList(); final List linkedList = createLinkedList(); final List list = createList(); import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
  • 39. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } public static List createList() { return new ArrayList(); } final List arrayList = createArrayList(); final List linkedList = createLinkedList(); final List list = createList(); import java.util.ArrayList; import java.util.LinkedList; import java.util.List;
  • 40. 9 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public class ListFactory {
 
 
 
 
 public static void main(String[] args) {
 
 
 
 }
 } public static List createArrayList() { return new ArrayList(); } public static List createLinkedList() { return new LinkedList(); } public static List createList() { return new ArrayList(); } final List arrayList = createArrayList(); final List linkedList = createLinkedList(); final List list = createList(); import java.util.ArrayList; import java.util.LinkedList; import java.util.List; What goals we reached?
  • 41. 10 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); public List<Data> execute() { //.... return result; } import java.util.List; import org.rapidpm.ListFactory; final List<Data> result = ListFactory.createArrayList();
  • 42. 10 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); public List<Data> execute() { //.... return result; } import java.util.List; import org.rapidpm.ListFactory; final List<Data> result = ListFactory.createArrayList();
  • 43. 10 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); public List<Data> execute() { //.... return result; } import java.util.List; import org.rapidpm.ListFactory; final List<Data> result = ListFactory.createArrayList();
  • 44. 10 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); public List<Data> execute() { //.... return result; } import java.util.List; import org.rapidpm.ListFactory; final List<Data> result = ListFactory.createArrayList();
  • 45. 10 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); public List<Data> execute() { //.... return result; } import java.util.List; import org.rapidpm.ListFactory; final List<Data> result = ListFactory.createArrayList();
  • 46. 10 The Basics @SvenRuppert what will be the right Implementation? with default Java SE public List<Data> execute() { //.... return result; } import java.util.List; import java.util.ArrayList; final List<Data> result = new ArrayList<>(); public List<Data> execute() { //.... return result; } import java.util.List; import org.rapidpm.ListFactory; final List<Data> result = ListFactory.createArrayList();
  • 47. 11 The Basics @SvenRuppert what is the right time to decide? what is the right freq. to decide? Scopes:
  • 48. 11 The Basics @SvenRuppert what is the right time to decide? what is the right freq. to decide? Scopes: Application / Singleton
  • 49. 11 The Basics @SvenRuppert what is the right time to decide? what is the right freq. to decide? Scopes: Application / Singleton Session
  • 50. 11 The Basics @SvenRuppert what is the right time to decide? what is the right freq. to decide? Scopes: Application / Singleton Session Request
  • 51. 11 The Basics @SvenRuppert what is the right time to decide? what is the right freq. to decide? Scopes: Application / Singleton Session Request Method
  • 53. 12 The Basics @SvenRuppert public interface Service {
 String doWork();
 }
  • 54. 12 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 }
  • 55. 12 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 } public static class BusinessModulA {
 private Service service;
 
 public BusinessModulA(final Service service) {
 this.service = service;
 }
 public void work() {
 service.doWork();
 }
 }
  • 56. 12 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 } public static class BusinessModulA {
 private Service service;
 
 public BusinessModulA(final Service service) {
 this.service = service;
 }
 public void work() {
 service.doWork();
 }
 } constructor
  • 57. 13 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 }
  • 58. 13 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 } public static class BusinessModulB {
 private Service service;
 
 public void setService(final Service service) {
 this.service = service;
 }
 
 public void work() {
 service.doWork();
 }
 }
  • 59. 13 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 } public static class BusinessModulB {
 private Service service;
 
 public void setService(final Service service) {
 this.service = service;
 }
 
 public void work() {
 service.doWork();
 }
 } expl. setter
  • 60. 14 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 }
  • 61. 14 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 } public static class BusinessModulC {
 private Service service;
 
 public void work() {
 service.doWork();
 }
 }
  • 62. 14 The Basics @SvenRuppert public interface Service {
 String doWork();
 } public static class Service2Inject implements Service {
 public String doWork() {
 return null;
 }
 } public static class BusinessModulC {
 private Service service;
 
 public void work() {
 service.doWork();
 }
 } reflection
  • 63. 15 The Basics @SvenRuppert BusinessModulA businessModulA 
 = new BusinessModulA(new Service2Inject());
 businessModulA.work();
  • 64. 15 The Basics @SvenRuppert BusinessModulA businessModulA 
 = new BusinessModulA(new Service2Inject());
 businessModulA.work(); T1: create the instance of the Service
  • 65. 15 The Basics @SvenRuppert BusinessModulA businessModulA 
 = new BusinessModulA(new Service2Inject());
 businessModulA.work(); T1: create the instance of the Service T2: create the instance of the BusinessModul
  • 66. 15 The Basics @SvenRuppert BusinessModulA businessModulA 
 = new BusinessModulA(new Service2Inject());
 businessModulA.work(); T1: create the instance of the Service T2: create the instance of the BusinessModul T3: method invoke
  • 67. 16 The Basics @SvenRuppert final BusinessModulB businessModulB = new BusinessModulB();
 businessModulB.setService(new Service2Inject());
 businessModulB.work();
  • 68. 16 The Basics @SvenRuppert final BusinessModulB businessModulB = new BusinessModulB();
 businessModulB.setService(new Service2Inject());
 businessModulB.work(); T1: create the instance of the BusinessModul
  • 69. 16 The Basics @SvenRuppert final BusinessModulB businessModulB = new BusinessModulB();
 businessModulB.setService(new Service2Inject());
 businessModulB.work(); T1: create the instance of the BusinessModul T2: create the instance of the Service
  • 70. 16 The Basics @SvenRuppert final BusinessModulB businessModulB = new BusinessModulB();
 businessModulB.setService(new Service2Inject());
 businessModulB.work(); T1: create the instance of the BusinessModul T2: create the instance of the Service T3: set the Service
  • 71. 16 The Basics @SvenRuppert final BusinessModulB businessModulB = new BusinessModulB();
 businessModulB.setService(new Service2Inject());
 businessModulB.work(); T1: create the instance of the BusinessModul T2: create the instance of the Service T3: set the Service T4: invoke method
  • 72. 17 The Basics @SvenRuppert final BusinessModulC businessModulC = new BusinessModulC();
 try {
 final Field serviceField = BusinessModulC.class
 .getDeclaredField("service");
 serviceField.set(businessModulC, new Service2Inject());
 } catch (NoSuchFieldException | IllegalAccessException e) {
 e.printStackTrace();
 }
 businessModulC.work();
  • 73. 17 The Basics @SvenRuppert final BusinessModulC businessModulC = new BusinessModulC();
 try {
 final Field serviceField = BusinessModulC.class
 .getDeclaredField("service");
 serviceField.set(businessModulC, new Service2Inject());
 } catch (NoSuchFieldException | IllegalAccessException e) {
 e.printStackTrace();
 }
 businessModulC.work(); T1: create the instance of the BusinessModule
  • 74. 17 The Basics @SvenRuppert final BusinessModulC businessModulC = new BusinessModulC();
 try {
 final Field serviceField = BusinessModulC.class
 .getDeclaredField("service");
 serviceField.set(businessModulC, new Service2Inject());
 } catch (NoSuchFieldException | IllegalAccessException e) {
 e.printStackTrace();
 }
 businessModulC.work(); T1: create the instance of the BusinessModule T2: create the instance of the Service
  • 75. 17 The Basics @SvenRuppert final BusinessModulC businessModulC = new BusinessModulC();
 try {
 final Field serviceField = BusinessModulC.class
 .getDeclaredField("service");
 serviceField.set(businessModulC, new Service2Inject());
 } catch (NoSuchFieldException | IllegalAccessException e) {
 e.printStackTrace();
 }
 businessModulC.work(); T1: create the instance of the BusinessModule T2: create the instance of the Service T3: set the Service
  • 76. 17 The Basics @SvenRuppert final BusinessModulC businessModulC = new BusinessModulC();
 try {
 final Field serviceField = BusinessModulC.class
 .getDeclaredField("service");
 serviceField.set(businessModulC, new Service2Inject());
 } catch (NoSuchFieldException | IllegalAccessException e) {
 e.printStackTrace();
 }
 businessModulC.work(); T1: create the instance of the BusinessModule T2: create the instance of the Service T3: set the Service T4: invoke method
  • 78. Dependency Injection 18 @SvenRuppert every framework will have a strategy how to resolve the Implementation
  • 79. Dependency Injection 18 @SvenRuppert every framework will have a strategy how to resolve the Implementation create/set the instance
  • 80. Dependency Injection 18 @SvenRuppert every framework will have a strategy how to resolve the Implementation create/set the instance manage the timeline
  • 81. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE )
  • 82. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) @PostConstruct and @PreDestroy lifecycle callbacks
  • 83. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives
  • 84. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes
  • 85. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes Interceptors and decorators
  • 86. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes Interceptors and decorators Stereotypes - combined Qualifier
  • 87. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes Interceptors and decorators Stereotypes - combined Qualifier Events
  • 88. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) Portable extension support @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes Interceptors and decorators Stereotypes - combined Qualifier Events
  • 89. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) Portable extension support @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes Interceptors and decorators Stereotypes - combined Qualifier Events
  • 90. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) Portable extension support @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes Interceptors and decorators Stereotypes - combined Qualifier Events
  • 91. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) Portable extension support @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes Interceptors and decorators Stereotypes - combined Qualifier Events
  • 92. A short view on WELD-SE - CDI 19 @SvenRuppert website : http://weld.cdi-spec.org/ the following features are available ( SE ) Portable extension support @PostConstruct and @PreDestroy lifecycle callbacks Dependency injection with qualifiers and alternatives @Application, @Dependent and @Singleton scopes Interceptors and decorators Stereotypes - combined Qualifier Events
  • 93. A short view on WELD-SE - CDI 20 @SvenRuppert
  • 94. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives
  • 95. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 }
  • 96. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 }
  • 97. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceDefault;
  • 98. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceDefault; OK
  • 99. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceDefault; public class Service_A implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } OK
  • 100. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceDefault; public class Service_A implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } WELD-001409: Ambiguous dependencies
  • 101. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceDefault; public class Service_A implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Prod WELD-001409: Ambiguous dependencies
  • 102. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceDefault; public class Service_A implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Prod OK
  • 103. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceDefault; public class Service_A implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Prod @Inject @Prod Service serviceProd; OK
  • 104. A short view on WELD-SE - CDI 20 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public class ServiceDefault implements Service {
 public String doWork(final String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceDefault; public class Service_A implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Prod @Inject @Prod Service serviceProd; OK
  • 105. A short view on WELD-SE - CDI 21 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 }
  • 106. A short view on WELD-SE - CDI 21 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public static class ServiceProducer{
 @Produces @WithProducer
 public Service create(){
 return txt -> Service.class.getSimpleName() + " " + txt;
 }
 }
  • 107. A short view on WELD-SE - CDI 21 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public static class ServiceProducer{
 @Produces @WithProducer
 public Service create(){
 return txt -> Service.class.getSimpleName() + " " + txt;
 }
 } @Inject @WithProducer Service serviceProd;
  • 108. A short view on WELD-SE - CDI 21 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public static class ServiceProducer{
 @Produces @WithProducer
 public Service create(){
 return txt -> Service.class.getSimpleName() + " " + txt;
 }
 } @Inject @WithProducer Service serviceProd;
  • 109. A short view on WELD-SE - CDI 21 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } public static class ServiceProducer{
 @Produces @WithProducer
 public Service create(){
 return txt -> Service.class.getSimpleName() + " " + txt;
 }
 } @Inject @WithProducer Service serviceProd;
  • 110. A short view on WELD-SE - CDI 22 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 }
  • 111. A short view on WELD-SE - CDI 22 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } @Alternative
 public class ServiceAlternative implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 }
  • 112. A short view on WELD-SE - CDI 22 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } @Alternative
 public class ServiceAlternative implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceProd;
  • 113. A short view on WELD-SE - CDI 22 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } @Alternative
 public class ServiceAlternative implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceProd; <beans ... >
 <alternatives>
 <class>org.rapidpm.ServiceAlternative</class>
 </alternatives>
 </beans>
  • 114. A short view on WELD-SE - CDI 22 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } @Alternative
 public class ServiceAlternative implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceProd; <beans ... >
 <alternatives>
 <class>org.rapidpm.ServiceAlternative</class>
 </alternatives>
 </beans>
  • 115. A short view on WELD-SE - CDI 22 @SvenRuppert Dependency injection with qualifiers and alternatives public interface Service {
 String doWork(String txt);
 } @Alternative
 public class ServiceAlternative implements Service {
 @Override
 public String doWork(String txt) {
 return this.getClass().getSimpleName() + " " + txt;
 }
 } @Inject Service serviceProd; <beans ... >
 <alternatives>
 <class>org.rapidpm.ServiceAlternative</class>
 </alternatives>
 </beans>
  • 116. A short view on WELD-SE - CDI 23 @SvenRuppert Dependency injection with qualifiers and alternatives
  • 117. A short view on WELD-SE - CDI 23 @SvenRuppert Dependency injection with qualifiers and alternatives @Inject Service service;
  • 118. A short view on WELD-SE - CDI 23 @SvenRuppert Dependency injection with qualifiers and alternatives @Inject Service service; Service service = container.select(Service.class).get();
  • 119. A short view on WELD-SE - CDI 23 @SvenRuppert Dependency injection with qualifiers and alternatives @Inject Service service; Service service = container.select(Service.class).get(); @Inject Instance<Service> serviceDefaultProxy;
  • 120. A short view on WELD-SE - CDI 23 @SvenRuppert Dependency injection with qualifiers and alternatives @Inject Service service; Service service = container.select(Service.class).get(); @Inject Instance<Service> serviceDefaultProxy; Service serviceDevProxy = container
 .instance()
 .select(Service.class)
 .select(new AnnotationLiteral<DEV>(){})
 .get();
  • 121. A short view on WELD-SE - CDI 23 @SvenRuppert Dependency injection with qualifiers and alternatives @Inject Service service; @Inject @WithProducer Service serviceProd; Service service = container.select(Service.class).get(); @Inject Instance<Service> serviceDefaultProxy; Service serviceDevProxy = container
 .instance()
 .select(Service.class)
 .select(new AnnotationLiteral<DEV>(){})
 .get();
  • 122. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection
  • 123. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service;
  • 124. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get();
  • 125. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get();
  • 126. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get();
  • 127. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) {
  • 128. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) {
  • 129. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) { final Class aClass = t.getClass();
  • 130. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) { final Class aClass = t.getClass(); final BeanManager beanManager = CDI.current().getBeanManager();
  • 131. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) { final Class aClass = t.getClass(); final BeanManager beanManager = CDI.current().getBeanManager(); final AnnotatedType annotationType
 = beanManager.createAnnotatedType(aClass);
  • 132. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) { final Class aClass = t.getClass(); final BeanManager beanManager = CDI.current().getBeanManager(); final AnnotatedType annotationType
 = beanManager.createAnnotatedType(aClass); final InjectionTarget injectionTarget
 = beanManager.createInjectionTarget(annotationType);
  • 133. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) { final Class aClass = t.getClass(); final BeanManager beanManager = CDI.current().getBeanManager(); final AnnotatedType annotationType
 = beanManager.createAnnotatedType(aClass); final InjectionTarget injectionTarget
 = beanManager.createInjectionTarget(annotationType); final CreationalContext creationalContext
 = beanManager.createCreationalContext(null);

  • 134. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) { final Class aClass = t.getClass(); final BeanManager beanManager = CDI.current().getBeanManager(); final AnnotatedType annotationType
 = beanManager.createAnnotatedType(aClass); final InjectionTarget injectionTarget
 = beanManager.createInjectionTarget(annotationType); final CreationalContext creationalContext
 = beanManager.createCreationalContext(null);
 injectionTarget.inject(t, creationalContext);
  • 135. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); public <T> T activateCDI(T t) { final Class aClass = t.getClass(); final BeanManager beanManager = CDI.current().getBeanManager(); final AnnotatedType annotationType
 = beanManager.createAnnotatedType(aClass); final InjectionTarget injectionTarget
 = beanManager.createInjectionTarget(annotationType); final CreationalContext creationalContext
 = beanManager.createCreationalContext(null);
 injectionTarget.inject(t, creationalContext); injectionTarget.postConstruct(t);
  • 136. A short view on WELD-SE - CDI 24 @SvenRuppert programmatically injection @Inject Service service; Service service = container.select(Service.class).get(); return t;
 } public <T> T activateCDI(T t) { final Class aClass = t.getClass(); final BeanManager beanManager = CDI.current().getBeanManager(); final AnnotatedType annotationType
 = beanManager.createAnnotatedType(aClass); final InjectionTarget injectionTarget
 = beanManager.createInjectionTarget(annotationType); final CreationalContext creationalContext
 = beanManager.createCreationalContext(null);
 injectionTarget.inject(t, creationalContext); injectionTarget.postConstruct(t);
  • 137. BoonDI - Project bootstrapping 25 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI
  • 138. BoonDI - Project bootstrapping 25 @SvenRuppert <dependency>
 <groupId>io.fastjson</groupId>
 <artifactId>boon</artifactId>
 <version>0.33</version>
 </dependency> website : 
 https://github.com/boonproject/boon/wiki/Boon-DI
  • 139. BoonDI - Project bootstrapping 25 @SvenRuppert <dependency>
 <groupId>javax.enterprise</groupId>
 <artifactId>cdi-api</artifactId>
 <version>1.2</version>
 </dependency>
 <dependency>
 <groupId>io.fastjson</groupId>
 <artifactId>boon</artifactId>
 <version>0.33</version>
 </dependency> website : 
 https://github.com/boonproject/boon/wiki/Boon-DI
  • 140. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI
  • 141. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI @In (old from Seam)
  • 142. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI @PostConstruct @In (old from Seam)
  • 143. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI @PostConstruct @In (old from Seam) @Autowired (from Spring)
  • 144. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI @PostConstruct @Inject @In (old from Seam) @Autowired (from Spring)
  • 145. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI @PostConstruct @Inject @Named @In (old from Seam) @Autowired (from Spring)
  • 146. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI @PostConstruct @Inject @Named @In (old from Seam) @Autowired (from Spring) @Required (from Spring)
  • 147. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI @PostConstruct @Inject @Named @In (old from Seam) @Autowired (from Spring) @Required (from Spring) @Qualifier (from Spring)
  • 148. BoonDI - not a replacement for ….. 26 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI @PostConstruct @Inject @Named @In (old from Seam) @Autowired (from Spring) @Required (from Spring) @Qualifier (from Spring) no Scopes
  • 149. BoonDI - not a replacement for ….. 27 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI Boon is not using - AnnotationProcessing - ByteCode - Manipulation
  • 150. BoonDI - not a replacement for ….. 27 @SvenRuppert website : 
 https://github.com/boonproject/boon/wiki/Boon-DI Boon is not using - AnnotationProcessing - ByteCode - Manipulation OK, this will lead to Reflection or?
  • 151. 28 BoonDI - Hello World @SvenRuppert
  • 152. 28 BoonDI - Hello World @SvenRuppert public class Service {
 
 @Inject SubService subService;
 
 @PostConstruct
 public void printInfoPostconstruct() {
 System.out.println("printInfoPostconstruct() "
 + this.getClass().getSimpleName());
 }
 }
  • 153. 28 BoonDI - Hello World @SvenRuppert public class Service {
 
 @Inject SubService subService;
 
 @PostConstruct
 public void printInfoPostconstruct() {
 System.out.println("printInfoPostconstruct() "
 + this.getClass().getSimpleName());
 }
 } public class SubService {
 @PostConstruct
 public void printInfoPostconstruct() {
 System.out.println("printInfoPostconstruct() "
 + this.getClass().getSimpleName());
 }
 }
  • 154. 29 BoonDI - Hello World @SvenRuppert
  • 155. 29 BoonDI - Hello World @SvenRuppert
  • 156. 29 BoonDI - Hello World @SvenRuppert
  • 157. 29 BoonDI - Hello World @SvenRuppert
  • 158. 29 BoonDI - Hello World @SvenRuppert final Module module = DependencyInjection.classes(Service.class);
  • 159. 29 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class);
  • 160. 30 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class);
  • 161. 30 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class); SubService == null
  • 162. 30 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class); SubService == null final Module module = DependencyInjection
 .classes(Service.class, SubService.class);
  • 163. 30 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class); SubService == null final Module module = DependencyInjection
 .classes(Service.class, SubService.class); final Context context = DependencyInjection.context(module);
  • 164. 30 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class); SubService == null final Module module = DependencyInjection
 .classes(Service.class, SubService.class); final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class);
  • 165. 30 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class); SubService == null SubService != null final Module module = DependencyInjection
 .classes(Service.class, SubService.class); final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class);
  • 166. 30 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class); SubService == null SubService != null final Module module = DependencyInjection
 .classes(Service.class, SubService.class); final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class);
  • 167. 30 BoonDI - Hello World @SvenRuppert final Service service1 = module.get(Service.class); final Module module = DependencyInjection.classes(Service.class); SubService == null SubService != null final Module module = DependencyInjection
 .classes(Service.class, SubService.class); final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class);
  • 168. 31 BoonDI - Hello World @SvenRuppert final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); final Module module = DependencyInjection
 .classes(Service.class, SubService.class);
  • 169. 31 BoonDI - Hello World @SvenRuppert final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); public class ServiceModule {
 
 
 } final Module module = DependencyInjection
 .classes(Service.class, SubService.class);
  • 170. 31 BoonDI - Hello World @SvenRuppert final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); public class ServiceModule {
 
 
 } final Module module = DependencyInjection
 .classes(Service.class, SubService.class); public Service provideService(){ return new Service(); }
  • 171. 31 BoonDI - Hello World @SvenRuppert final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); public class ServiceModule {
 
 
 } final Module module = DependencyInjection
 .classes(Service.class, SubService.class); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); }
  • 172. 31 BoonDI - Hello World @SvenRuppert final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); public class ServiceModule {
 
 
 } final Module module = DependencyInjection
 .classes(Service.class, SubService.class); final Module module = DependencyInjection
 .module(new ServiceModule()); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); }
  • 173. 31 BoonDI - Hello World @SvenRuppert final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); public class ServiceModule {
 
 
 } final Module module = DependencyInjection
 .classes(Service.class, SubService.class); final Context context = DependencyInjection.context(module); final Module module = DependencyInjection
 .module(new ServiceModule()); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); }
  • 174. 31 BoonDI - Hello World @SvenRuppert final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); public class ServiceModule {
 
 
 } final Module module = DependencyInjection
 .classes(Service.class, SubService.class); final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); final Module module = DependencyInjection
 .module(new ServiceModule()); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); }
  • 175. 32 BoonDI - Hello World @SvenRuppert public class ServiceModule {
 
 
 } final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); final Module module = DependencyInjection
 .module(new ServiceModule()); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); }
  • 176. 32 BoonDI - Hello World @SvenRuppert public class ServiceModule {
 
 
 } final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); final Module module = DependencyInjection
 .module(new ServiceModule()); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); }
  • 177. 32 BoonDI - Hello World @SvenRuppert public class ServiceModule {
 
 
 } final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); final Module module = DependencyInjection
 .module(new ServiceModule()); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); }
  • 178. 32 BoonDI - Hello World @SvenRuppert public class ServiceModule {
 
 
 } final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); final Module module = DependencyInjection
 .module(new ServiceModule()); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); } naming conventions
  • 179. 32 BoonDI - Hello World @SvenRuppert public class ServiceModule {
 
 
 } final Context context = DependencyInjection.context(module); final Service service2 = context.get(Service.class); final Module module = DependencyInjection
 .module(new ServiceModule()); public Service provideService(){ return new Service(); } public SubService provideSubService() { return new SubService(); } naming conventions not refactoring safe
  • 180. 33 BoonDI - Modules @SvenRuppert at runtime you can addModule() removeModule()
  • 181. 34 BoonDI - Modules - be careful :-) @SvenRuppert
  • 182. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA {
  • 183. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ...");
  • 184. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ...");
  • 185. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ...");
  • 186. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB {
  • 187. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { out.println("provideServiceBA ...");
  • 188. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { out.println("provideServiceBA ..."); public Service provideServiceB() { out.println("provideServiceBB ...");
  • 189. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { out.println("provideServiceBA ..."); public Service provideServiceB() { out.println("provideServiceBB ..."); public Service provideServiceC() { out.println("provideServiceBC ...");
  • 190. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { out.println("provideServiceBA ..."); public Service provideServiceB() { out.println("provideServiceBB ..."); public Service provideServiceC() { out.println("provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB());
  • 191. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { out.println("provideServiceBA ..."); public Service provideServiceB() { out.println("provideServiceBB ..."); public Service provideServiceC() { out.println("provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB());
  • 192. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { out.println("provideServiceBA ..."); public Service provideServiceB() { out.println("provideServiceBB ..."); public Service provideServiceC() { out.println("provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB());
  • 193. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { out.println("provideServiceBA ..."); public Service provideServiceB() { out.println("provideServiceBB ..."); public Service provideServiceC() { out.println("provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB());
  • 194. 34 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { out.println("provideServiceAA ..."); public Service provideServiceB() { out.println("provideServiceAB ..."); public Service provideServiceC() { out.println("provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { out.println("provideServiceBA ..."); public Service provideServiceB() { out.println("provideServiceBB ..."); public Service provideServiceC() { out.println("provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB());
  • 195. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB());
  • 196. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA);
  • 197. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class);
  • 198. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB
  • 199. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB final Context add = context.add(moduleB);
  • 200. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB final Context add = context.add(moduleB); context.get(Service.class);
  • 201. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB final Context add = context.add(moduleB); context.get(Service.class); provideServiceAB
  • 202. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB final Context add = context.add(moduleB); context.get(Service.class); add.get(Service.class); provideServiceAB
  • 203. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB final Context add = context.add(moduleB); context.get(Service.class); add.get(Service.class); provideServiceAB provideServiceAB
  • 204. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB final Context add = context.add(moduleB); context.get(Service.class); add.get(Service.class); provideServiceAB provideServiceAB final Context context = DependencyInjection.context(moduleA,moduleB);
  • 205. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB final Context add = context.add(moduleB); context.get(Service.class); add.get(Service.class); provideServiceAB provideServiceAB final Context context = DependencyInjection.context(moduleA,moduleB); context.get(Service.class);
  • 206. 35 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleA); context.get(Service.class); provideServiceAB final Context add = context.add(moduleB); context.get(Service.class); add.get(Service.class); provideServiceAB provideServiceAB final Context context = DependencyInjection.context(moduleA,moduleB); context.get(Service.class); provideServiceAB
  • 207. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB());
  • 208. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB);
  • 209. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class);
  • 210. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB
  • 211. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA);
  • 212. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA); context.get(Service.class);
  • 213. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA); context.get(Service.class); provideServiceBB
  • 214. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA); context.get(Service.class); add.get(Service.class); provideServiceBB
  • 215. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA); context.get(Service.class); add.get(Service.class); provideServiceBB provideServiceBB
  • 216. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA); context.get(Service.class); add.get(Service.class); provideServiceBB provideServiceBB final Context context = DependencyInjection.context(moduleB,moduleA);
  • 217. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA); context.get(Service.class); add.get(Service.class); provideServiceBB provideServiceBB final Context context = DependencyInjection.context(moduleB,moduleA); context.get(Service.class);
  • 218. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA); context.get(Service.class); add.get(Service.class); provideServiceBB provideServiceBB final Context context = DependencyInjection.context(moduleB,moduleA); context.get(Service.class); provideServiceBB
  • 219. 36 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceA() { "provideServiceAA ..."); public Service provideServiceB() {"provideServiceAB ..."); public Service provideServiceC() {"provideServiceAC ..."); public class ServiceModuleB { public Service provideServiceA() { "provideServiceBA ..."); public Service provideServiceB() { "provideServiceBB ..."); public Service provideServiceC() {"provideServiceBC ..."); final Module moduleA = DependencyInjection.module(new ServiceModuleA());
 final Module moduleB = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection.context(moduleB); context.get(Service.class); provideServiceBB final Context add = context.add(moduleA); context.get(Service.class); add.get(Service.class); provideServiceBB provideServiceBB final Context context = DependencyInjection.context(moduleB,moduleA); context.get(Service.class); provideServiceBB So far so good…. but what could happen??
  • 220. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ...");
  • 221. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA());
  • 222. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA());
  • 223. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB());
  • 224. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB());
  • 225. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection
  • 226. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1)
  • 227. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1)
  • 228. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2)
  • 229. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2);
  • 230. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class);
  • 231. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); provideServiceAB
  • 232. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); context.remove(moduleA1); provideServiceAB
  • 233. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); context.remove(moduleA1); context.get(Service.class); provideServiceAB
  • 234. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); context.remove(moduleA1); context.get(Service.class); provideServiceAB provideServiceBB
  • 235. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); context.remove(moduleA1); context.get(Service.class); context.remove(moduleB1); provideServiceAB provideServiceBB
  • 236. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); context.remove(moduleA1); context.get(Service.class); context.remove(moduleB1); context.get(Service.class); provideServiceAB provideServiceBB
  • 237. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); context.remove(moduleA1); context.get(Service.class); context.remove(moduleB1); context.get(Service.class); provideServiceAB provideServiceBB provideServiceAB
  • 238. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); context.remove(moduleA1); context.get(Service.class); context.remove(moduleB1); context.get(Service.class); context.remove(moduleA2); provideServiceAB provideServiceBB provideServiceAB
  • 239. 37 BoonDI - Modules - be careful :-) @SvenRuppert public class ServiceModuleA { public Service provideServiceB() {"provideServiceAB ..."); public class ServiceModuleB { public Service provideServiceB() {"provideServiceBB ..."); final Module moduleA1 = DependencyInjection.module(new ServiceModuleA()); final Module moduleA2 = DependencyInjection.module(new ServiceModuleA()); final Module moduleB1 = DependencyInjection.module(new ServiceModuleB()); final Module moduleB2 = DependencyInjection.module(new ServiceModuleB()); final Context context = DependencyInjection .context(moduleA1).context(moduleB1) .context(moduleA2).context(moduleB2); context.get(Service.class); context.remove(moduleA1); context.get(Service.class); context.remove(moduleB1); context.get(Service.class); context.remove(moduleA2); context.get(Service.class); provideServiceAB provideServiceBB provideServiceAB