SlideShare una empresa de Scribd logo
1 de 536
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (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
 

Destacado

Colaboración y Negocios Web 20
Colaboración y Negocios Web 20Colaboración y Negocios Web 20
Colaboración y Negocios Web 20
Emprende 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 Online
IAB México
 
Comunicado Numero 1 CIMI
Comunicado Numero 1 CIMIComunicado Numero 1 CIMI
Comunicado Numero 1 CIMI
Desarrollo Sena
 
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
 
Memoria bomberos 2012
Memoria bomberos 2012Memoria bomberos 2012
Memoria bomberos 2012
Roberto Caro
 
Adaptive Selection in Evolutionary Algorithm thesis
Adaptive Selection in Evolutionary Algorithm thesisAdaptive Selection in Evolutionary Algorithm thesis
Adaptive Selection in Evolutionary Algorithm thesis
Riyad Parvez
 
Astrónomos y astrólogos
Astrónomos y astrólogosAstrónomos y astrólogos
Astrónomos y astrólogos
Pilar Muñoz
 

Destacado (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
 

Similar a DI Frameworks - hidden pearls

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
sales88
 
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
freddysarabia1
 
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
aksahnan
 
9781111530532 ppt ch09
9781111530532 ppt ch099781111530532 ppt ch09
9781111530532 ppt ch09
Terry 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.pdf
amazing2001
 
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
sachinactivepower
 
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.pdf
fatoryoutlets
 

Similar a 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
 

Más de Sven Ruppert

Más 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
 

Último

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Último (20)

SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 

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