@Autowired vs @Resource in Spring

🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.

▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube

▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube

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

Spring Boot 3 Paid Course Published for Free
on my Java Guides YouTube Channel

Subscribe to my YouTube Channel (165K+ subscribers):
Java Guides Channel

Top 10 My Udemy Courses with Huge Discount:
Udemy Courses - Ramesh Fadatare