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 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.
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.
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.
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