CDI - Dependency Injection in Java EE 7: Dependency Injection in Java EE 7
By Dirk Weil
()
About this ebook
Read more from Dirk Weil
Java EE 6: Enterprise-Anwendungsentwicklung leicht gemacht Rating: 0 out of 5 stars0 ratings
Related to CDI - Dependency Injection in Java EE 7
Titles in the series (100)
Zend Framework 2: Für Einsteiger und Umsteiger Rating: 0 out of 5 stars0 ratingsJavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsIT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratingsHTML5 Security Rating: 0 out of 5 stars0 ratingsEinstieg in Google Go Rating: 0 out of 5 stars0 ratingsJavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsNFC: Near Field Communication für Android-Entwickler Rating: 5 out of 5 stars5/5HTML5 für Mobile Web Rating: 0 out of 5 stars0 ratingsSkalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Rating: 0 out of 5 stars0 ratingsUser Experience Testing 3.0: Status Quo, Entwicklung und Trends Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsServiceorientierte Architektur: Anforderungen, Konzeption und Praxiserfahrungen Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsUX Design für Tablet-Websites: Ein Überblick Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratingsGeolocation mit PHP: Foursquare-API, Google Places & Qype Rating: 0 out of 5 stars0 ratingsADF - Mobile Apps entwickeln und Swing ablösen: Mobile Apps entwickeln und Swing ablösen Rating: 0 out of 5 stars0 ratingsÜberzeugende Präsentationen: Konzeption, Technik und Design Rating: 0 out of 5 stars0 ratingsApache Tapestry: Einstieg in die komponentenorientierte Webentwicklung Rating: 0 out of 5 stars0 ratingsTFS 2012 Versionskontrolle: Grundlagen, Check-In Policies und Branch-Modelle Rating: 0 out of 5 stars0 ratingsQualitätssicherung mit JavaScript und PHP Rating: 0 out of 5 stars0 ratingsMobile Business: Was Entscheider morgen wissen müssen Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsNutzeraspekte in Suchmaschinen: Komponenten für eine gelungene Usability-Gestaltung Rating: 0 out of 5 stars0 ratingsQualität in IT-Architekturen: Strategie und Planung Rating: 0 out of 5 stars0 ratingsAmazon Web Services für .NET Entwickler Rating: 0 out of 5 stars0 ratingsSharePoint-Entwicklung für Einsteiger Rating: 0 out of 5 stars0 ratingsNintex Workflow: Konzepte und Strategien für leistungsfähige SharePoint-Workflows Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratings
Related ebooks
Apache Tamaya: Einstieg in die Konfiguration in Java Rating: 0 out of 5 stars0 ratingsJavaFX Rendering & 3D Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratingsDependency Injection in Java: Testing mit CDI-Unit und DI-Frameworks Rating: 0 out of 5 stars0 ratingsErfahrungen mit Eclipse 4: aus der Praxis für die Praxis Rating: 0 out of 5 stars0 ratingsXtend beyond Java: DSL für mobile Business-Apps Rating: 0 out of 5 stars0 ratingsJava – die Neuerungen in Version 9 bis 12: Modularisierung, Syntax- und API-Erweiterungen Rating: 0 out of 5 stars0 ratingsApps mit Azure Rating: 0 out of 5 stars0 ratingsJava EE Testing mit Arquillian Rating: 0 out of 5 stars0 ratingsAufsetzen, Testen und Betrieb einer Android-App Rating: 0 out of 5 stars0 ratingsVue.js für alle: Wissenswertes für Einsteiger und Experten Rating: 0 out of 5 stars0 ratingsWebentwicklung mit dem Play Framework Rating: 0 out of 5 stars0 ratingsDatenbankentwicklung lernen mit SQL Server 2022: Der praxisorientierte Grundkurs – auch für SQL Server Express Rating: 0 out of 5 stars0 ratingsZend Framework 2: Für Einsteiger und Umsteiger Rating: 0 out of 5 stars0 ratingsiOS Essentials: Frameworks, Tools und Twitter API Rating: 0 out of 5 stars0 ratingsModerne Webanwendungen mit AngularJS Rating: 0 out of 5 stars0 ratingsArchitekturpatterns mit Python: Test-Driven Development, Domain-Driven Design und Event-Driven Microservices praktisch umgesetzt Rating: 0 out of 5 stars0 ratingsGrails: Webanwendungen mit Groovy und Grails schnell+kompakt Rating: 0 out of 5 stars0 ratingsDocker und die Containerwelt: Einstieg und Expertentipps rund um Docker-Container Rating: 1 out of 5 stars1/5JavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsWorkshop Java EE 7: Ein praktischer Einstieg in die Java Enterprise Edition mit dem Web Profile Rating: 0 out of 5 stars0 ratingsJava 9 – Die Neuerungen: Syntax- und API-Erweiterungen und Modularisierung im Überblick Rating: 0 out of 5 stars0 ratingsDocker: Webseiten mittels Containerarchitektur erstellen Rating: 3 out of 5 stars3/5Vaadin Schnelleinstieg Rating: 0 out of 5 stars0 ratingsVaadin mit Eclipse, Clojure und OSGi Rating: 0 out of 5 stars0 ratingsExpertentipps zu Angular: Neuerungen in Angular 6, Umgang mit Microservices, Performanz und UX-Design Rating: 0 out of 5 stars0 ratingsMicroservices: Der Hype im Realitätscheck Rating: 0 out of 5 stars0 ratingsWebanwendungen erstellen mit Vue.js: MVVM-Muster für konventionelle und Single-Page-Webseiten Rating: 0 out of 5 stars0 ratingsJava 7: Project Coin, Generics und NIO2 Rating: 0 out of 5 stars0 ratingsEclipse SmartHome und Smart Office: Intelligente Lösungen in der Heimautomation Rating: 0 out of 5 stars0 ratings
Programming For You
Hacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Rating: 0 out of 5 stars0 ratingsNew Game Plus: Perspektiven der Game Studies. Genres - Künste - Diskurse (Bild und Bit. Studien zur digitalen Medienkultur) Rating: 0 out of 5 stars0 ratingsPython-Grundlagen Rating: 0 out of 5 stars0 ratingsDie ultimative FRITZ!Box Bibel - Das Praxisbuch 2. aktualisierte Auflage - mit vielen Insider Tipps und Tricks - komplett in Farbe Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Einstieg • Optimierung • Projekte Rating: 5 out of 5 stars5/5Programmieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsPython programmieren lernen: Der spielerische Einstieg mit Minecraft Rating: 0 out of 5 stars0 ratingsEigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsHTML5-Programmierung von Kopf bis Fuß: Webanwendungen mit HTML5 und JavaScript Rating: 0 out of 5 stars0 ratingsPython lernen – kurz & gut Rating: 0 out of 5 stars0 ratingsRaspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Rating: 0 out of 5 stars0 ratingsSQL – kurz & gut Rating: 0 out of 5 stars0 ratingsMikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Rating: 0 out of 5 stars0 ratingsPython | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Rating: 0 out of 5 stars0 ratingsTraumjob IT 2021: Branchenüberblick, Erfahrungsberichte und Tipps zum Berufseinstieg Rating: 5 out of 5 stars5/5Bash kurz & gut Rating: 0 out of 5 stars0 ratingsMicrocontroller für das IoT Rating: 0 out of 5 stars0 ratingsPython kurz & gut: Für Python 3.x und 2.7 Rating: 3 out of 5 stars3/5C++: Eine kompakte Einführung Rating: 0 out of 5 stars0 ratingsProgrammieren für Einsteiger: Teil 1 Rating: 0 out of 5 stars0 ratingsAndroid-Programmierung kurz & gut Rating: 0 out of 5 stars0 ratingsDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Rating: 4 out of 5 stars4/5Softwareentwicklungsprozess: Von der ersten Idee bis zur Installation Rating: 0 out of 5 stars0 ratingsDas Franzis Starterpaket Arduino Uno: Das Handbuch für den Schnelleinstieg Rating: 0 out of 5 stars0 ratings.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Rating: 0 out of 5 stars0 ratingsVue.js für alle: Wissenswertes für Einsteiger und Experten Rating: 0 out of 5 stars0 ratingsLinux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Rating: 0 out of 5 stars0 ratingsLinux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Rating: 0 out of 5 stars0 ratings
Reviews for CDI - Dependency Injection in Java EE 7
0 ratings0 reviews
Book preview
CDI - Dependency Injection in Java EE 7 - Dirk Weil
http://www.caucho.com/resin/candi/
2 Wozu braucht man das?
Professionelle Anwendungen sind nicht monolithisch aufgebaut, sondern bestehen aus Komponenten. Zum einen ergeben sich bei der Entwicklung von Software aus der Analyse der Aufgabenstellung fachliche Bereiche, die durch fachliche Komponenten abgebildet werden können. Innerhalb dieser Komponenten lassen sich wieder Teile abgrenzen, diesmal eher technischer Natur. Die Komponenten benutzen andere Komponenten und die Plattformdienste, sind aber weitgehend abgegrenzt (Abb. 2.1).
Abbildung 2.1: Anwendungskomponenten
Eine Aufgabe der Softwareentwicklung ist es nun, diese Komponenten untereinander zu verknüpfen, sodass eine saubere Anwendungsarchitektur entsteht. Das kann natürlich mit einfachen Sprachmitteln von Java geschehen. Eine Komponente kann in ihrem Programmcode andere Komponenten instanziieren, indem sie new benutzt. Dadurch wird die Kopplung der Komponenten aber sehr stark, denn die aufrufende Komponente muss die benutzte sehr genau kennen, Änderungen sind aufwändig, der Einsatz einer alternativen Komponente unmöglich.
Zudem profitieren solche Objekte kaum von der Umgebung der Anwendung: Der Applikationsserver „kennt sie nicht, kann also bspw. kein Monitoring und keine Laufzeitsteuerung dafür durchführen. Flexibler ist es, die benötigten Objekte vom Application Server herstellen zu lassen. In den früheren Versionen der Java EE – damals noch J2EE – hat man dazu weitgehend String-basierte Referenzen benutzt, hat also bspw. die benötigte Komponente per Namen im JNDI-Dienst adressiert. Hier stellt sich aber das Problem der „Zielgenauigkeit
: Ist ein Objekt unter dem verwendeten Namen überhaupt vorhanden und hat es den richtigen Typ (Listing 2.1)?
// Unsicher: Ist ein Objekt mit dem Namen konfiguriert?
// Falls ja, hat es den korrekten Typ?
MyService myService
= (MyService) jndiContext.lookup(ejb/myService
);
Listing 2.1: Referenzierung einer Komponente über ihren Namen
Ein weiteres Problem ist die Abhängigkeit der aufrufenden Komponente von ihrer Umgebung: Der Code im Beispiel setzt unumstößlich voraus, dass es einen JNDI-Dienst gibt. Ein Test des Codes außerhalb des Applikationsservers ist damit unmöglich. Hier setzt die Idee Inversion of Control an, die den aktiven Teil der Komponentenverknüpfung aus der Komponente herauslöst und in die Laufzeitumgebung – den Container – verlagert: Nicht die Komponente besorgt sich die von ihr benötigten Serviceobjekte, sondern der Container liefert sie an. Dieses Verfahren firmiert unter dem Namen Dependency Injection – Injektion von benötigten Objekten, womit wir auch schon die beiden letzten Drittel des Namens CDI erklärt hätten (Abb. 2.2).
Abbildung 2.2: Dependency