SlideShare a Scribd company logo
1 of 127
Download to read offline
Dependency Injection
with Programmatic Configuration
Peter Lehto
Senior Vaadin Expert
@peter_lehto
Dependency Injection (DI) is a runtime mechanism
Dependency Injection (DI) is a runtime mechanism
Dependency Injection (DI) is a runtime mechanism
where dependency between the client object and the
dependent object does not occur directly.
Dependency Injection (DI) is a runtime mechanism
where dependency between the client object and the
dependent object does not occur directly.
Dependency Injection (DI) is a runtime mechanism
where dependency between the client object and the
dependent object does not occur directly.
With DI the client object does not necessarily manage
the lifecycle of the dependent object.
Dependency Injection (DI) is a runtime mechanism
where dependency between the client object and the
dependent object does not occur directly.
With DI the client object does not necessarily
manage the lifecycle of the dependent object.
Dependency Injection (DI) is a runtime mechanism
where dependency between the client object and the
dependent object does not occur directly.
With DI the client object does not necessarily
manage the lifecycle of the dependent object.
Instead with DI a special DI container takes care of
the object lifecycle management
Dependency Injection (DI) is a runtime mechanism
where dependency between the client object and the
dependent object does not occur directly.
With DI the client object does not necessarily
manage the lifecycle of the dependent object.
Instead with DI a special DI container takes care of
the object lifecycle management
Dependency Injection (DI) is a runtime mechanism
where dependency between the client object and the
dependent object does not occur directly.
With DI the client object does not necessarily
manage the lifecycle of the dependent object.
Instead with DI a special DI container takes care of
the object lifecycle management where clients
reference managed and possibly shared objects.
Dependency Injection (DI) is a runtime mechanism
where dependency between the client object and the
dependent object does not occur directly.
With DI the client object does not necessarily
manage the lifecycle of the dependent object.
Instead with DI a special DI container takes care of
the object lifecycle management where clients
reference managed and possibly shared objects.
Why…?
•
Loose coupling
•
Loose coupling
•
Dependency inversion
•
Loose coupling
•
Dependency inversion
•
High Abstraction
•
Loose coupling
•
Dependency inversion
•
High Abstraction
•
Highly cohesive modules
•
Loose coupling
•
Dependency inversion
•
High Abstraction
•
Highly cohesive modules
•
Deployment time config
How…?
CDI
Context and Dependency Injection
JSR-299
JavaEE specification
Spring
Framework
SpringBeans
•
@Inject
•
@Inject
•
@Autowired
•
@Inject
•
@Autowired
•
@Qualifier
•
@Inject
•
@Autowired
•
@Qualifier
•
@Produces
•
@Inject
•
@Autowired
•
@Qualifier
•
@Produces
•
@Bean
•
@Inject
•
@Autowired
•
@Qualifier
•
@Produces
•
@Bean
•
@Component
Example?
public interface VehicleService {
void performService(Vehicle vehicle);
}
@Named("Audi")
public class AudiService implements VehicleService {
@Override
public void performService(Vehicle vehicle) {
System.out.println("Performing Audi service");
}
}
@Named("BMW")
public class BMWService implements VehicleService {
@Override
public void performService(Vehicle vehicle) {
System.out.println("Performing BMW service");
}
}
@Named("VW")
public class VWService implements VehicleService {
@Override
public void performService(Vehicle vehicle) {
System.out.println("Performing VW service");
}
}
public class VehicleOperator {
@Inject
@Named("Audi")
private VehicleService audiService;
}
public class VehicleOperator {
@Inject
@Named("Audi")
private VehicleService audiService;
@Inject
@Named("BMW")
private VehicleService bmwService;
}
public class VehicleOperator {
@Inject
@Named("Audi")
private VehicleService audiService;
@Inject
@Named("BMW")
private VehicleService bmwService;
@Inject
@Named("VW")
private VehicleService vwService;
}
public class VehicleOperator {
@Inject
@Named("Audi")
private VehicleService audiService;
@Inject
@Named("BMW")
private VehicleService bmwService;
@Inject
@Named("VW")
private VehicleService vwService;
public void operate(Vehicle vehicle) {
audiService.performService(vehicle);
}
}
Setter
Injection
For interfering purposes
public class VehicleOperator {
private VehicleService audiService;
private VehicleService bmwService;
private VehicleService vwService;
public class VehicleOperator {
private VehicleService audiService;
private VehicleService bmwService;
private VehicleService vwService;
@Inject
public void setAudiService(@Named("Audi") VehicleService audiService) {
this.audiService = audiService;
}
public class VehicleOperator {
private VehicleService audiService;
private VehicleService bmwService;
private VehicleService vwService;
@Inject
public void setAudiService(@Named("Audi") VehicleService audiService) {
this.audiService = audiService;
}
@Inject
public void setBMWService(@Named("BMW") VehicleService bmwService) {
this.bmwService = bmwService;
}
public class VehicleOperator {
private VehicleService audiService;
private VehicleService bmwService;
private VehicleService vwService;
@Inject
public void setAudiService(@Named("Audi") VehicleService audiService) {
this.audiService = audiService;
}
@Inject
public void setBMWService(@Named("BMW") VehicleService bmwService) {
this.bmwService = bmwService;
}
@Inject
public void setVWService(@Named("VW") VehicleService vwService) {
this.vwService = vwService;
}
Constructor
Injection
For injecting at initialisation time
public class VehicleOperator {
private VehicleService audiService;
private VehicleService bmwService;
private VehicleService vwService;
public class VehicleOperator {
private VehicleService audiService;
private VehicleService bmwService;
private VehicleService vwService;
@Inject
public VehicleOperator(@Named("Audi") VehicleService audiService,
@Named("BMW") VehicleService bmwService,
@Named("VW") VehicleService vwService) {
this.audiService = audiService;
…
}
Producer
method
For programmatic bean manipulation
public class VehicleServiceFactory {
}
public class VehicleServiceFactory {
@Produces
@Named("VW")
protected VehicleService produceVWService() {
}
}
public class VehicleServiceFactory {
@Produces
@Named("VW")
protected VehicleService produceVWService() {
VehicleService vwService = ServiceProvider.provideVWService();
vwService.enableEmissionManipulation(true);
return vwService;
}
}
Avoid
ambiguity
with @Vetoed, @Alternative or @Primary
Programmatic
Injection
With Instance<T>
public class VehicleOperator {
}
public class VehicleOperator {
@Inject
@Named("BMW")
private Instance<VehicleService> serviceInstantiator;
}
public class VehicleOperator {
@Inject
@Named("BMW")
private Instance<VehicleService> serviceInstantiator;
public void operate(Vehicle vehicle) {
VehicleService service = serviceInstantiator.get();
}
}
public class VehicleOperator {
@Inject
@Named("BMW")
private Instance<VehicleService> serviceInstantiator;
public void operate(Vehicle vehicle) {
VehicleService service = serviceInstantiator.get();
service.performService(vehicle);
}
}
Programmatic
Configuration!
As promised :)
public class Vehicle {
public String getMake() {
return "BMW";
}
}
public class NamedLiteral extends
AnnotationLiteral<Named> implements Named
public class VehicleOperater {
public class VehicleOperater {
@Inject
@Any
private Instance<VehicleService> serviceInstantiator;
}
public class VehicleOperater {
@Inject
@Any
private Instance<VehicleService> serviceInstantiator;
public void operate(Vehicle vehicle) {
NamedLiteral named = new NamedLiteral(vehicle.getMake());
}
}
public class VehicleOperater {
@Inject
@Any
private Instance<VehicleService> serviceInstantiator;
public void operate(Vehicle vehicle) {
NamedLiteral named = new NamedLiteral(vehicle.getMake());
VehicleService service = serviceInstantiator.select(named).get();
}
}
public interface TaskProcessor {
void processTask(Task task);
}
@AsynchronousProcessing
public class ReportingTask implements Task {
}
@AsynchronousProcessing
public class ReportingTask implements Task {
}
@SynchronousProcessing
public class SaveDataTask implements Task {
}
@AsynchronousProcessing
public class AsynchronousTaskProcessor implements TaskProcessor {
@Override
public void processTask(Task task) {
}
}
@AsynchronousProcessing
public class AsynchronousTaskProcessor implements TaskProcessor {
@Override
public void processTask(Task task) {
}
}
@SynchronousProcessing
public class SynchronousTaskProcessor implements TaskProcessor {
@Override
public void processTask(Task task) {
}
}
public class TaskHandler {
@Inject
@Any
private Instance<TaskProcessor> processorInstantiator;
}
public class TaskHandler {
@Inject
@Any
private Instance<TaskProcessor> processorInstantiator;
public void handleTasks(List<Task> tasks) {
tasks.forEach(task -> {
processorInstantiator.select(task.getClass().getAnnotations()).get().
processTask(task);
});
}
}
Vaadin with
CDI
public class MyVaadinUI extends UI {
}
@CDIUI("")
public class MyVaadinUI extends UI {
}
@CDIUI("")
public class MyVaadinUI extends UI {
@Inject
private MainMenu mainMenu;
@Inject
private ViewArea viewArea;
}
@CDIUI("")
public class MyVaadinUI extends UI {
@Inject
private MainMenu mainMenu;
@Inject
private ViewArea viewArea;
@Override
protected void init(VaadinRequest request) {
HorizontalLayout hl =
new HorizontalLayout(mainMenu, viewArea);
…
setContent(hl);
}
}
UI as managed bean
Entry point
UI as managed bean
Entry point
Context aware
UI as managed bean
Entry point
Context aware
Accesible through URI
UI as managed bean
@CDIUI("")
public class MyVaadinUI extends UI {
@Inject
private MainMenu mainMenu;
@Inject
private ViewArea viewArea;
@Override
protected void init(VaadinRequest request) {
HorizontalLayout hl =
new HorizontalLayout(mainMenu, viewArea);
…
setContent(hl);
}
}
@CDIUI("anotherUI")
public class MyVaadinUI extends UI {
@Inject
private MainMenu mainMenu;
@Inject
private ViewArea viewArea;
@Override
protected void init(VaadinRequest request) {
HorizontalLayout hl =
new HorizontalLayout(mainMenu, viewArea);
…
setContent(hl);
}
}
http://localhost:8080/app/
http://localhost:8080/app/anotherUI
app: context
anotherUI : UI name
Scope UI specific beans with
@UIScoped
@UIScoped
public class MainMenuBean extends CssLayout
implements MainMenu
@UIScoped
Bean associated with UI instance
@UIScoped
Bean associated with UI instance
Bean associated with Web browser tab
@UIScoped
Bean associated with UI instance
Bean associated with Web browser tab
@CDIUI is by default @UIScoped
@UIScoped
@CDIUI
MyVaadinUI
_____________________________
@Inject

private MainMenu menu;

@Inject

private User currentUser;

@UIScoped
MyVaadinUI

MainMenu
@SessionScoped
User
@CDIUI
MyVaadinUI
_____________________________
@Inject

private MainMenu menu;

@Inject

private User currentUser;

@UIScoped
MyVaadinUI

MainMenu
@SessionScoped
User

@CDIUI
MyVaadinUI
_____________________________
@Inject

private MainMenu menu;

@Inject

private User currentUser;

@CDIUI
MyVaadinUI
_____________________________
@Inject

private MainMenu menu;

@Inject

private User currentUser;

@UIScoped
MyVaadinUI

MainMenu
@UIScoped
MyVaadinUI

MainMenu
What about Views?
View
Component composition
View
Component composition
Active view switched by Navigator
View
Component composition
Active view switched by Navigator
Positioned inside ViewDisplay
View
HorizontalLayoutContentAreaMenu
View1
View2
View3
HorizontalLayoutView1Menu
View1
View2
View3
HorizontalLayoutView2Menu
View1
View2
View3
HorizontalLayoutView3Menu
View1
View2
View3
View as managed bean with
@CDIView
public class CustomerViewBean
public class CustomerViewBean extends VerticalLayout
@CDIView("customers")
public class CustomerViewBean extends VerticalLayout
implements View
http://localhost:8080/app/#!customers
#! : Navigator identifier
customers : View name
Scope View specific beans with
@ViewScoped
@ViewScoped
Beans associated with View
@ViewScoped
Beans associated with View
@CDIView by default @ViewScoped
@ViewScoped
@ApplicationScoped
@ApplicationScoped@ApplicationScoped
@SessionScoped @SessionScoped @SessionScoped
@ApplicationScoped
@SessionScoped @SessionScoped @SessionScoped
@UI
Scoped
@UI
Scoped
@UI
Scoped
@UI
Scoped
@UI
Scoped
@UI
Scoped
@ApplicationScoped
@
View
@
View
@
View
@
View
@
View
@
View
@
View
@
View
@
View
@
View
@
View
@
View
@SessionScoped @SessionScoped @SessionScoped
@UI
Scoped
@UI
Scoped
@UI
Scoped
@UI
Scoped
@UI
Scoped
@UI
Scoped
Lessons learned
Lessons learned
1. Depend on abstractions through Dependency Inversion
Lessons learned
1. Depend on abstractions through Dependency Inversion
2. Beans need to be managed by (CDI) container
Lessons learned
1. Depend on abstractions through Dependency Inversion
2. Beans need to be managed by (CDI) container
3. Inject to Fields, Methods and Constructor
Lessons learned
1. Depend on abstractions through Dependency Inversion
2. Beans need to be managed by (CDI) container
3. Inject to Fields, Methods and Constructor
4. Producer method allows programmatic bean creation and non-default
constructor
Lessons learned
1. Depend on abstractions through Dependency Inversion
2. Beans need to be managed by (CDI) container
3. Inject to Fields, Methods and Constructor
4. Producer method allows programmatic bean creation and non-default
constructor
5. Instance<T> provides on-demand instantiation with candidate selection
Lessons learned
1. Depend on abstractions through Dependency Inversion
2. Beans need to be managed by (CDI) container
3. Inject to Fields, Methods and Constructor
4. Producer method allows programmatic bean creation and non-default
constructor
5. Instance<T> provides on-demand instantiation with candidate selection
6. Use CDIUI and CDIView for making core Vaadin concepts managed beans
I would NOT start a single new
Vaadin project without
Dependency
Injection!
Thank you!

More Related Content

What's hot

Vaadin DevDay 2017 - Web Components
Vaadin DevDay 2017 - Web ComponentsVaadin DevDay 2017 - Web Components
Vaadin DevDay 2017 - Web ComponentsPeter Lehto
 
Vaadin Flow - JavaLand 2018
Vaadin Flow - JavaLand 2018Vaadin Flow - JavaLand 2018
Vaadin Flow - JavaLand 2018Peter Lehto
 
Building web apps with Vaadin 8
Building web apps with Vaadin 8 Building web apps with Vaadin 8
Building web apps with Vaadin 8 Marcus Hellberg
 
Introduction to Google Guice
Introduction to Google GuiceIntroduction to Google Guice
Introduction to Google GuiceKnoldus Inc.
 
Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CNjojule
 
GWT integration with Vaadin
GWT integration with VaadinGWT integration with Vaadin
GWT integration with VaadinPeter Lehto
 
Vaadin 7 - Java Enterprise Edition integration
Vaadin 7 - Java Enterprise Edition integrationVaadin 7 - Java Enterprise Edition integration
Vaadin 7 - Java Enterprise Edition integrationPeter Lehto
 
What's new in Vaadin 8, how do you upgrade, and what's next?
What's new in Vaadin 8, how do you upgrade, and what's next?What's new in Vaadin 8, how do you upgrade, and what's next?
What's new in Vaadin 8, how do you upgrade, and what's next?Marcus Hellberg
 
Guice tutorial
Guice tutorialGuice tutorial
Guice tutorialAnh Quân
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular UJoonas Lehtinen
 
Web Components for Java Developers
Web Components for Java DevelopersWeb Components for Java Developers
Web Components for Java DevelopersJoonas Lehtinen
 
MVVM & Data Binding Library
MVVM & Data Binding Library MVVM & Data Binding Library
MVVM & Data Binding Library 10Clouds
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternFabio Collini
 
Working with AngularJS
Working with AngularJSWorking with AngularJS
Working with AngularJSAndré Vala
 
Udi Dahan Intentions And Interfaces
Udi Dahan Intentions And InterfacesUdi Dahan Intentions And Interfaces
Udi Dahan Intentions And Interfacesdeimos
 

What's hot (20)

Vaadin DevDay 2017 - Web Components
Vaadin DevDay 2017 - Web ComponentsVaadin DevDay 2017 - Web Components
Vaadin DevDay 2017 - Web Components
 
Vaadin Flow - JavaLand 2018
Vaadin Flow - JavaLand 2018Vaadin Flow - JavaLand 2018
Vaadin Flow - JavaLand 2018
 
Building web apps with Vaadin 8
Building web apps with Vaadin 8 Building web apps with Vaadin 8
Building web apps with Vaadin 8
 
Introduction to Google Guice
Introduction to Google GuiceIntroduction to Google Guice
Introduction to Google Guice
 
Vaadin 8 and 10
Vaadin 8 and 10Vaadin 8 and 10
Vaadin 8 and 10
 
Google Guice
Google GuiceGoogle Guice
Google Guice
 
Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CN
 
GWT integration with Vaadin
GWT integration with VaadinGWT integration with Vaadin
GWT integration with Vaadin
 
Vaadin 7 - Java Enterprise Edition integration
Vaadin 7 - Java Enterprise Edition integrationVaadin 7 - Java Enterprise Edition integration
Vaadin 7 - Java Enterprise Edition integration
 
What's new in Vaadin 8, how do you upgrade, and what's next?
What's new in Vaadin 8, how do you upgrade, and what's next?What's new in Vaadin 8, how do you upgrade, and what's next?
What's new in Vaadin 8, how do you upgrade, and what's next?
 
Guice tutorial
Guice tutorialGuice tutorial
Guice tutorial
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular U
 
Vaadin Components
Vaadin ComponentsVaadin Components
Vaadin Components
 
Web Components for Java Developers
Web Components for Java DevelopersWeb Components for Java Developers
Web Components for Java Developers
 
Java EE 6 & Spring: A Lover's Quarrel
Java EE 6 & Spring: A Lover's QuarrelJava EE 6 & Spring: A Lover's Quarrel
Java EE 6 & Spring: A Lover's Quarrel
 
MVVM & Data Binding Library
MVVM & Data Binding Library MVVM & Data Binding Library
MVVM & Data Binding Library
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
 
Vaadin 7
Vaadin 7Vaadin 7
Vaadin 7
 
Working with AngularJS
Working with AngularJSWorking with AngularJS
Working with AngularJS
 
Udi Dahan Intentions And Interfaces
Udi Dahan Intentions And InterfacesUdi Dahan Intentions And Interfaces
Udi Dahan Intentions And Interfaces
 

Similar to Techlunch - Dependency Injection with Vaadin

Dependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDiego Lewin
 
Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Stephan Hochdörfer
 
Spring IOC and DAO
Spring IOC and DAOSpring IOC and DAO
Spring IOC and DAOAnushaNaidu
 
Real World Dependency Injection - phpday
Real World Dependency Injection - phpdayReal World Dependency Injection - phpday
Real World Dependency Injection - phpdayStephan Hochdörfer
 
Dependency Inversion Principle
Dependency Inversion PrincipleDependency Inversion Principle
Dependency Inversion PrincipleShahriar Hyder
 
Real World Dependency Injection - IPC11 Spring Edition
Real World Dependency Injection - IPC11 Spring EditionReal World Dependency Injection - IPC11 Spring Edition
Real World Dependency Injection - IPC11 Spring EditionStephan Hochdörfer
 
Real World Dependency Injection - PFCongres 2010
Real World Dependency Injection - PFCongres 2010Real World Dependency Injection - PFCongres 2010
Real World Dependency Injection - PFCongres 2010Stephan Hochdörfer
 
springtraning-7024840-phpapp01.pdf
springtraning-7024840-phpapp01.pdfspringtraning-7024840-phpapp01.pdf
springtraning-7024840-phpapp01.pdfBruceLee275640
 
Crossroads of Asynchrony and Graceful Degradation
Crossroads of Asynchrony and Graceful DegradationCrossroads of Asynchrony and Graceful Degradation
Crossroads of Asynchrony and Graceful DegradationC4Media
 
Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Stephan Hochdörfer
 
Introduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionIntroduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionRichard Paul
 
Angular js for beginners
Angular js for beginnersAngular js for beginners
Angular js for beginnersMunir Hoque
 
Spring training
Spring trainingSpring training
Spring trainingTechFerry
 
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDBMongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDBMongoDB
 
MVVM Design Pattern NDC2009
MVVM Design Pattern NDC2009MVVM Design Pattern NDC2009
MVVM Design Pattern NDC2009Jonas Follesø
 
Guide To Continuous Deployment Containerization With Docker Complete Deck
Guide To Continuous Deployment Containerization With Docker Complete DeckGuide To Continuous Deployment Containerization With Docker Complete Deck
Guide To Continuous Deployment Containerization With Docker Complete DeckSlideTeam
 

Similar to Techlunch - Dependency Injection with Vaadin (20)

JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
 
Dependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony Container
 
Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13
 
Spring IOC and DAO
Spring IOC and DAOSpring IOC and DAO
Spring IOC and DAO
 
Real World Dependency Injection - phpday
Real World Dependency Injection - phpdayReal World Dependency Injection - phpday
Real World Dependency Injection - phpday
 
Swiz DAO
Swiz DAOSwiz DAO
Swiz DAO
 
Dependency Inversion Principle
Dependency Inversion PrincipleDependency Inversion Principle
Dependency Inversion Principle
 
JavaCro'15 - Web UI best practice integration with Java EE 7 - Peter Lehto
JavaCro'15 - Web UI best practice integration with Java EE 7 - Peter LehtoJavaCro'15 - Web UI best practice integration with Java EE 7 - Peter Lehto
JavaCro'15 - Web UI best practice integration with Java EE 7 - Peter Lehto
 
Real World Dependency Injection - IPC11 Spring Edition
Real World Dependency Injection - IPC11 Spring EditionReal World Dependency Injection - IPC11 Spring Edition
Real World Dependency Injection - IPC11 Spring Edition
 
Real World Dependency Injection - PFCongres 2010
Real World Dependency Injection - PFCongres 2010Real World Dependency Injection - PFCongres 2010
Real World Dependency Injection - PFCongres 2010
 
springtraning-7024840-phpapp01.pdf
springtraning-7024840-phpapp01.pdfspringtraning-7024840-phpapp01.pdf
springtraning-7024840-phpapp01.pdf
 
Crossroads of Asynchrony and Graceful Degradation
Crossroads of Asynchrony and Graceful DegradationCrossroads of Asynchrony and Graceful Degradation
Crossroads of Asynchrony and Graceful Degradation
 
Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13
 
Introduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionIntroduction to Spring's Dependency Injection
Introduction to Spring's Dependency Injection
 
Angular js for beginners
Angular js for beginnersAngular js for beginners
Angular js for beginners
 
Spring training
Spring trainingSpring training
Spring training
 
From mvc to viper
From mvc to viperFrom mvc to viper
From mvc to viper
 
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDBMongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDB
 
MVVM Design Pattern NDC2009
MVVM Design Pattern NDC2009MVVM Design Pattern NDC2009
MVVM Design Pattern NDC2009
 
Guide To Continuous Deployment Containerization With Docker Complete Deck
Guide To Continuous Deployment Containerization With Docker Complete DeckGuide To Continuous Deployment Containerization With Docker Complete Deck
Guide To Continuous Deployment Containerization With Docker Complete Deck
 

Recently uploaded

AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsThierry TROUIN ☁
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...aditipandeya
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkataanamikaraghav4
 
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130  Available With RoomVIP Kolkata Call Girl Alambazar 👉 8250192130  Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Roomdivyansh0kumar0
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girladitipandeya
 
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607dollysharma2066
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxellan12
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Roomishabajaj13
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts servicevipmodelshub1
 
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine ServiceHot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Servicesexy call girls service in goa
 
Radiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsRadiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsstephieert
 
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneRussian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneCall girls in Ahmedabad High profile
 

Recently uploaded (20)

AlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with FlowsAlbaniaDreamin24 - How to easily use an API with Flows
AlbaniaDreamin24 - How to easily use an API with Flows
 
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Saket Delhi 💯Call Us 🔝8264348440🔝
 
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
VIP 7001035870 Find & Meet Hyderabad Call Girls Dilsukhnagar high-profile Cal...
 
Call Girls In South Ex 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
Call Girls In South Ex 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICECall Girls In South Ex 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
Call Girls In South Ex 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SERVICE
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Uttam Nagar Delhi 💯Call Us 🔝8264348440🔝
 
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls KolkataVIP Call Girls Kolkata Ananya 🤌  8250192130 🚀 Vip Call Girls Kolkata
VIP Call Girls Kolkata Ananya 🤌 8250192130 🚀 Vip Call Girls Kolkata
 
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
Dwarka Sector 26 Call Girls | Delhi | 9999965857 🫦 Vanshika Verma More Our Se...
 
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130  Available With RoomVIP Kolkata Call Girl Alambazar 👉 8250192130  Available With Room
VIP Kolkata Call Girl Alambazar 👉 8250192130 Available With Room
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
 
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 22 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
 
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
FULL ENJOY Call Girls In Mayur Vihar Delhi Contact Us 8377087607
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
 
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With RoomVIP Kolkata Call Girl Salt Lake 👉 8250192130  Available With Room
VIP Kolkata Call Girl Salt Lake 👉 8250192130 Available With Room
 
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts serviceChennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
Chennai Call Girls Alwarpet Phone 🍆 8250192130 👅 celebrity escorts service
 
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine ServiceHot Service (+9316020077 ) Goa  Call Girls Real Photos and Genuine Service
Hot Service (+9316020077 ) Goa Call Girls Real Photos and Genuine Service
 
Radiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girlsRadiant Call girls in Dubai O56338O268 Dubai Call girls
Radiant Call girls in Dubai O56338O268 Dubai Call girls
 
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service ThaneRussian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
Russian Call Girls Thane Swara 8617697112 Independent Escort Service Thane
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 

Techlunch - Dependency Injection with Vaadin