Dependency injection is a design pattern that allows classes to have their dependencies satisfied externally rather than internally. It promotes loose coupling between classes and makes code more organized and flexible. Bean management allows the dependency injection framework to automatically instantiate objects and their dependencies rather than requiring manual setup. Inversion of control inverts traditional object creation by allowing external configuration to determine default property values and dependencies rather than coding them. Aspect oriented programming allows cross-cutting concerns like logging or error handling to be defined separately from the core functionality they apply to.