# CSE 1105 Collaborative Software Engineering Project ## Dependency Injection > **Dependent-on components** not managed by the component anymore, but need to be provided (injected) from outside. ### Dependency Inversion Principle Traditional Control Flow: - App calls/uses Library Inverted Control Flow: - App calls interface - the Library implements the interface The high-level code no longer depends on the low-level code, both depend on abstractions. For example: ```java public interface RailObject { boolean isRunning(); void setDestination(String destinationName); Duration getRunningTime(); } public interface RailController { private RailObject[] objects; public RailController(RailObject[] objects) { this.objects = objects; } public void setAllDestinations(StationDataSet stops) { for (RailObject object : objects) { // sommige dingen doen ... } } } ``` Here, a `RailObject` can be implemented by any class, as long as they provide the right interface methods, `isRunning`, `setDestination`, `getRunningTime`. This decouples `RailController` from a specific implementation of `RailObject`, like `Train`, such that the controller can be used for more objects. ## JavaFX ## Spring Boot