#107 Dependency Injection example JavaDoc
This commit is contained in:
		| @@ -9,23 +9,27 @@ import com.google.inject.Injector; | ||||
|  * implements so called inversion of control principle. Inversion of control has two specific rules: | ||||
|  *  - High-level modules should not depend on low-level modules. Both should depend on abstractions. | ||||
|  *  - Abstractions should not depend on details. Details should depend on abstractions. | ||||
|  *   | ||||
|  *  In this example we show you three different wizards. The first one (SimpleWizard) is a naive  | ||||
|  *  <p> | ||||
|  *  In this example we show you three different wizards. The first one ({@link SimpleWizard}) is a naive  | ||||
|  *  implementation violating the inversion of control principle. It depends directly on a concrete | ||||
|  *  implementation which cannot be changed. | ||||
|  *   | ||||
|  *  The second wizard (AdvancedWizard) is more flexible. It does not depend on any concrete implementation  | ||||
|  *  but abstraction. It utilizes Dependency Injection pattern allowing its Tobacco dependency to be | ||||
|  *  <p> | ||||
|  *  The second wizard ({@link AdvancedWizard}) is more flexible. It does not depend on any concrete implementation  | ||||
|  *  but abstraction. It utilizes Dependency Injection pattern allowing its {@link Tobacco} dependency to be | ||||
|  *  injected through its constructor. This way, handling the dependency is no longer the wizard's | ||||
|  *  responsibility. It is resolved outside the wizard class. | ||||
|  *   | ||||
|  *  <p> | ||||
|  *  The third example takes the pattern a step further. It uses Guice framework for Dependency Injection. | ||||
|  *  TobaccoModule binds a concrete implementation to abstraction. Injector is then used to create | ||||
|  *  GuiceWizard object with correct dependencies. | ||||
|  *  {@link TobaccoModule} binds a concrete implementation to abstraction. Injector is then used to create | ||||
|  *  {@link GuiceWizard} object with correct dependencies. | ||||
|  * | ||||
|  */ | ||||
| public class App { | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Program entry point | ||||
| 	 * @param args command line args | ||||
| 	 */ | ||||
|     public static void main( String[] args ) { | ||||
|     	SimpleWizard simpleWizard = new SimpleWizard(); | ||||
|     	simpleWizard.smoke(); | ||||
|   | ||||
| @@ -2,7 +2,7 @@ package com.iluwatar.dependency.injection; | ||||
|  | ||||
| /** | ||||
|  *  | ||||
|  * OldTobyTobacco concrete Tobacco implementation | ||||
|  * OldTobyTobacco concrete {@link Tobacco} implementation | ||||
|  * | ||||
|  */ | ||||
| public class OldTobyTobacco extends Tobacco { | ||||
|   | ||||
| @@ -2,7 +2,7 @@ package com.iluwatar.dependency.injection; | ||||
|  | ||||
| /** | ||||
|  *  | ||||
|  * RivendellTobacco concrete Tobacco implementation | ||||
|  * RivendellTobacco concrete {@link Tobacco} implementation | ||||
|  * | ||||
|  */ | ||||
| public class RivendellTobacco extends Tobacco { | ||||
|   | ||||
| @@ -2,7 +2,7 @@ package com.iluwatar.dependency.injection; | ||||
|  | ||||
| /** | ||||
|  *  | ||||
|  * SecondBreakfastTobacco concrete Tobacco implementation | ||||
|  * SecondBreakfastTobacco concrete {@link Tobacco} implementation | ||||
|  * | ||||
|  */ | ||||
| public class SecondBreakfastTobacco extends Tobacco { | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import com.google.inject.AbstractModule; | ||||
|  | ||||
| /** | ||||
|  *  | ||||
|  * Guice module for binding certain concrete Tobacco implementation. | ||||
|  * Guice module for binding certain concrete {@link Tobacco} implementation. | ||||
|  * | ||||
|  */ | ||||
| public class TobaccoModule extends AbstractModule { | ||||
|   | ||||
| @@ -4,6 +4,11 @@ import org.junit.Test; | ||||
|  | ||||
| import com.iluwatar.dependency.injection.App; | ||||
|  | ||||
| /** | ||||
|  *  | ||||
|  * Application test | ||||
|  * | ||||
|  */ | ||||
| public class AppTest { | ||||
|  | ||||
| 	@Test | ||||
|   | ||||
		Reference in New Issue
	
	Block a user