Create the class, then new OrderService(new SlackNotificationService()) in main.
Depending on EmailService couples you to one channel; depending on NotificationService lets any implementation be substituted (email, SMS, stub, …).
Constructor — required deps are non-null after construction; object can be immutable (final fields); always fully wired when used.
Stage 1: OrderService creates EmailService. Stage 3: main (external assembler) creates it and injects it.
Self-check
No. DI is a general design technique. Spring automates it.
Control of creating / wiring dependencies moves out of the dependent class to an external assembler / container.
Plain Java has no container reading annotations to set private fields after construction. Field injection becomes practical when a framework (Spring) processes those annotations.