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

Room. Reactive queries

Room has great integration with LiveData. Results from SQL queries can be easily wrapped in LiveData container. This way LiveData can be observed in the UI. When the data is changed in the database, all active observers get notified and update the corresponding views.

Weiterlesen »
View Model. Example

In this article we will go through the steps of creating a simple game screen. We will make it the traditional way without using View Model and we will see why it is absolutely wrong to persist data in the View.

Weiterlesen »