Where can we use @autowired Annotation?


The @Autowired annotation in Spring can be used in various scenarios to enable automatic dependency injection. Here are the common places where you can use the @Autowired annotation:


Constructor Injection:

You can use the @Autowired annotation on a constructor to indicate that the dependencies should be injected through the constructor. 

This is often considered a recommended practice.

  • Example:

@Component 
public class MyClass
private MyDependency dependency;
@Autowired 
public MyClass(MyDependency dependency) {
this.dependency = dependency;
 } 
// ... }

Field Injection:

The @Autowired annotation can be used on fields to enable field injection. Spring will automatically inject the dependency into the annotated field.

  • Example:

@Component 
public class MyClass {
@Autowired 
private MyDependency dependency;
// ... }

Setter Injection:

You can also use the @Autowired annotation on setter methods. Spring will invoke the annotated method and inject the dependency into the corresponding property or parameter.

  • Example:

@Component 
public class MyClass {
private MyDependency dependency;
@Autowired 
public void setDependency(MyDependency dependency)
this.dependency = dependency; 
 } 
// ... }

Method Injection:

The @Autowired annotation can be used on non-setter methods to enable method injection. Spring will invoke the annotated method and inject the required dependencies.

  • Example:

@Component 
public class MyClass {
private MyDependency dependency;
@Autowired 
public void init(MyDependency dependency) {
this.dependency = dependency; 
 }
// ... }


It's important to note that the @Autowired annotation can be used in Spring-managed components such as @Controller, @Service, @Repository, or any other custom component marked with @Component or its derivatives.


Additionally, the @Autowired annotation can also be used in conjunction with other annotations like @Qualifier or @Value to further specify the injection or resolve dependencies based on qualifiers or property values.


In summary, you can use the @Autowired annotation in constructors, fields, setter methods, or non-setter methods to enable automatic dependency injection in Spring-managed components.