WalzoneInterview Prep
πŸ“ž Interviewing soon? Practice with a realistic AI mock phone interview β€” it calls you, then scores you. First 15 min FREE β†’

Spring Boot & Hibernate Β· Intermediate Β· question 21 of 100

What is the difference between @Autowired and @Inject annotations in Spring Boot?

πŸ“• Buy this interview preparation book: 100 Spring Boot & Hibernate questions & answers β€” PDF + EPUB for $5

Both @Autowired and @Inject annotations are used in Spring Boot for dependency injection, which is a key feature of the framework. Dependency injection is the process of providing objects that an object depends upon, rather than having the object create those objects itself. This approach helps to decouple the code and improve testability and maintainability.

The main difference between @Autowired and @Inject annotations is that @Autowired is a Spring-specific annotation, while @Inject is part of the Java Dependency Injection (JSR-330) specification. However, Spring provides support for both annotations, and they can be used interchangeably in most cases.

Here are some key differences between @Autowired and @Inject annotations:

Required attribute: In @Autowired, the required attribute is set to true by default, which means that Spring will throw an exception if it cannot find a matching bean to inject. In @Inject, the required attribute is set to false by default, which means that the injection is optional.

Qualifiers: In @Autowired, you can use the @Qualifier annotation to specify which bean to inject if multiple beans of the same type are available. In @Inject, you can use the @Named annotation to achieve the same effect.

Type safety: @Inject provides better type safety than @Autowired because it is part of the Java Dependency Injection specification. This means that the compiler can check the types of the injected objects at compile time, rather than at runtime.

Here is an example of how @Autowired and @Inject annotations can be used to inject dependencies in a Spring Boot application:

    @Service
    public class MyService {
        private final MyRepository myRepository;
        
        @Autowired // or @Inject
        public MyService(MyRepository myRepository) {
            this.myRepository = myRepository;
        }
        
        public List<MyObject> getAllObjects() {
            return myRepository.findAll();
        }
    }
    
    @Repository
    public class MyRepository {
        public List<MyObject> findAll() {
            // return all MyObject instances
        }
    }

In this example, we have defined a MyService class that depends on a MyRepository instance. We have used the @Autowired annotation (or alternatively @Inject) to inject the MyRepository instance into the constructor of MyService. The MyRepository class is annotated with @Repository, which tells Spring to create a bean for the class and make it available for dependency injection.

Overall, both @Autowired and @Inject annotations are used in Spring Boot for dependency injection, and they provide similar functionality. The choice between the two annotations mostly comes down to personal preference and the specific needs of the application.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Spring Boot & Hibernate interview β€” then scores it.
πŸ“ž Practice Spring Boot & Hibernate β€” free 15 min
πŸ“• Buy this interview preparation book: 100 Spring Boot & Hibernate questions & answers β€” PDF + EPUB for $5

All 100 Spring Boot & Hibernate questions Β· All topics