1. Introduction
In the Spring framework, @Autowired and @Resource are annotations used for dependency injection, which is a way to achieve Inversion of Control (IoC) by allowing the Spring container to inject dependencies into components. @Autowired is Spring's own annotation, while @Resource is specified by the JSR-250 Java standard.
2. Key Points
1. @Autowired is part of the Spring framework and injects dependencies by type.
2. @Resource is a standard annotation intended for dependency injection by name.
3. @Autowired has support for additional features such as the @Qualifier annotation for further disambiguation.
4. @Resource can be used outside of the Spring context, as it's not Spring-specific.
3. Differences
@Autowired | @Resource |
---|---|
Spring-specific annotation. | JSR-250 Java standard annotation. |
Performs dependency injection by type. | Performs dependency injection by name (and optionally by type). |
Can be used with @Qualifier to further specify the bean to inject. | Has a name attribute to indicate the specific bean to inject. |
Does not need to specify a bean name unless using @Qualifier. | You specify the bean name explicitly using the name attribute. |
4. Example
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import javax.annotation.Resource;
public class MyService {
// @Autowired injects by type
@Autowired
private MyDependency myDependency;
// @Autowired with @Qualifier injects a specific bean by name
@Autowired
@Qualifier("specificDependency")
private MyDependency anotherDependency;
// @Resource injects by name
@Resource(name="myResource")
private MyDependency resourceDependency;
}
public class MyDependency {
// Class content
}
Output:
// No output, since this is a demonstration of annotations usage.
Explanation:
1. @Autowired without @Qualifier injects the MyDependency bean based on its type.
2. @Autowired with @Qualifier("specificDependency") specifies exactly which bean should be injected when multiple beans of the same type exist.
3. @Resource(name="myResource") injects the MyDependency bean by its name.
5. When to use?
- Use @Autowired when you are working within the Spring ecosystem and want to inject dependencies by type and are okay with Spring handling the resolution.
- Use @Resource when you want to be more explicit about the bean name or when you are writing code that is possibly outside of the Spring framework.
Comments
Post a Comment
Leave Comment