Mark EmailService / SmsService / OrderService with @Component (implementations + consumer), inject NotificationService into OrderService via constructor, fetch OrderService from the context.
Without disambiguation Spring fails with a non-unique bean error. @Primary picks a default; @Qualifier("smsService") picks by name (default bean name is usually the camelCase class name).
Use @Bean for types you do not own / cannot annotate, or when construction needs custom factory logic. Use @Component for your own everyday app classes.
False. Only objects registered with the container (component scan or @Bean, etc.) are beans. A plain new inside business code is a normal Java object unless returned from a @Bean method (or otherwise registered).
Self-check
An object instantiated and managed by the Spring IoC container.
No (in modern Spring / Boot) — a single constructor is enough for the container to use it. Multiple constructors → mark the chosen one with @Autowired.
The Spring IoC container (ApplicationContext), based on your annotations / config metadata.