Very short,
What is the purpose of DI?
With dependency injection, objects don't define their dependencies themselves, the dependencies are injected to them as needed.
How does it benefit ?
The objects don't need to know where and how to get their dependencies, which results in loose coupling between objects, which makes them a lot easier to test.
How is it implemented ?
Usually a container manages the lifecycle of objects and their dependencies based on a configuration file or annotations.