Dependency Injection

What is Dependency Injection?

Each Object-oriented application consists of many classes that work together in order to solve a problem. However, when writing a complex application, application classes should be as independent as possible. DI helps in gluing these classes together and at the same time keeping them independent. Dependency injection is a technique whereby one object (or static method) supplies the dependencies of another object.

Pros

  • increase the possibility to reuse classes
  • test them independently of other classes while unit testing

Code with no DI vs code with DI

				
					public class Computer {

    private CPU cpu;
    
    public Computer() {
        this.cpu = new CPU();
    }
}
				
			

Dependency between Computer and CPU.

				
					public class Computer {

    private CPU cpu;
    
    public Computer(CPU cpu) {
        this.cpu = cpu;
    }
    
}
				
			

Dependency between Computer and CPU. Dependency is injected through class constructor (Computer should not worry about CPU implementation).

Types of DI

  • Constructor-based dependency injection – used for mandatory dependencies
				
					public Computer(CPU cpu) {
    this.cpu = cpu;
}
				
			
  • Setter-based dependency injection – used for optional dependencies
				
					public Computer(CPU cpu) {
    this.cpu = cpu;
}
				
			
  • Property-based dependency injection – considered as bad practice!
				
					@Autowired
private CPU cpu;
				
			
Share :
Share :

Weitere Beiträge

MVVM and its implementation in Android

Writing application code before thinking about an architecture is a really bad idea. Android programming does not make a difference. Everybody who starts creating Android apps begins doing so without following a specific architecture.

Weiterlesen »
LiveData

LiveData is an observable data holder class. It is also lifecycle-aware, which means that it respects the lifecycle of the other app components, such as activities, fragments and services. It notifies only active observers, represented by the Observer class.

Weiterlesen »