Working with different types of dependencies (primitives, objects, collections)

In Spring Framework, dependency injection is a key concept that allows us to decouple our application components and manage their dependencies. These dependencies can take different forms, such as primitives, objects, and collections. Understanding how to work with each type is essential for effective dependency injection in Spring.

Primitives

Primitives are basic data types like integers, strings, booleans, etc. In Spring, we can inject primitives using the @Value annotation. For example, if we have a property file named application.properties with a key app.port containing the value 8080, we can inject this value into a variable using the @Value annotation:

@Value("${app.port}")
private int port;

By referencing the property using the ${...} syntax, Spring will automatically resolve and inject the value at runtime.

Objects

When working with objects, we typically rely on the @Autowired annotation. By annotating a field or a constructor parameter with @Autowired, Spring will automatically search for a matching bean to inject. For example, consider a UserService that depends on a UserRepository:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    // ...
}

Here, Spring will look for a bean of type UserRepository and inject it into the userRepository field.

Collections

Working with collections is common when we have dependencies that involve multiple instances. Spring offers different approaches for injecting collections, depending on our requirements. One way is to use the @Autowired annotation with the List type, like this:

@Autowired
private List<UserService> userServiceList;

This will inject all UserService beans into the userServiceList. Additionally, Spring allows us to use the @Qualifier annotation to specify which instances should be injected. For example:

@Autowired
@Qualifier("adminService")
private List<UserService> adminUsers;

In this case, only the UserService beans with the qualifier "adminService" will be injected into the adminUsers list.

Another approach is to use the @Autowired annotation with Map type, allowing us to inject instances as key-value pairs. For example:

@Autowired
private Map<String, UserService> userServiceMap;

This will inject all UserService beans into the userServiceMap, with their bean names as keys.

Conclusion

Working with different types of dependencies in Spring Framework is essential for effective dependency injection. By understanding how to inject primitives, objects, and collections, we can decouple our application components and manage their dependencies easily. Whether it's injecting basic types, object dependencies, or multiple instances, Spring provides flexible and powerful mechanisms to handle various scenarios.


noob to master © copyleft