IOC stands for inversion of control.
The approach of outsourcing the construction and management of objects.
Spring container’s primary functions
- create and manage objects is (Inversion of control)
- inject object dependencies is (Dependency injection)
Configuring spring container
- XML configuration file (legacy)
- Java Annotation (modern)
- Java Source code (modern)
Dependency injection
The dependency inversion principle.
The client delegates to another object the responsibility of providing its dependencies.
Injection Type
There are three types of injection with spring
- Field Injection (Not recommended)
- Setter Injection
- Constructor Injection
Injection type which one to use
Constructor injection
- Use this when you have required dependencies.
- Generally recommended by the spring.io development team as the first choice.
Setter Injection
- Use this when you have optional dependencies.
- If dependencies are not provided then your app can provide reasonable default logic.
What is spring Autowiring
For dependency injection spring use Autowiing
Spring will look for the class that matches: by class or interface
Spring will inject it automatically.. hence it is Autowired
@Component Annotation
- @Component annotation marks the class as spring bean
- A Spring bean is a regular Java class that is managed by Spring.
- @Component annotation makes the bean available for the Dependency injection.
@Qualifier Annotation
@Qualifier annotation comes into the picture when one interface has multiple implementations
@Primary annotation
Resolving issues with multiple interface implementation
@Primry annotation is the alternate solution for the @Qualifier annotation
@Primary is a class level annotation is a class level annotation
@Qualifier has higher priority than the @Primary
Problem with @Primary
Only class can be marked as @Primary
If you have multiple @Primary then the app will throw an error
@Qualifer is recommended because it has higher priority and is more specific because it is @paramter level annotation we can adjust it in the code based on the requirement.