개발공부/Spring

[spring] @Autowired 위치와 required 옵션

환타몬 2022. 1. 25. 15:48

어노테이션 Autowired의 위치를 다르게 쓸 수 있다.

 

1.  setter 위에 놓는 경우

2. 필드 위에 놓는 경우

3. overloaded 생성자 위에 놓는 경우

 

1,3번의 경우 당연한 것이다. Constructor 인젝션, setter 인젝션 크게 두 가지로 나뉘기 때문이다. 

 

2번의 경우 필드 위에 @Autowired를 적으면 기본 생성자를 호출하는 과정에서 injection이 된다. 

그렇기 때문에 만약 본인이 기본 생성자를 호출하는 과정에서 injection이 되길 원한다면 필드 위에 어노테이션을 설정해주면 된다.

 

 

또 overloaded 생성자에다가 꽂을 수 있는데, 여기서는 생성자 위에 적으면 에러가 난다.

그렇기 때문에

@Autowired
	  public ExamInlineConsole(@Qualifier("exam2") Exam exam) { 
	  this.exam = exam;
	  System.out.println("overloaded constructor");
	   }

이렇게 Qualifier 어노테이션을 파라미터에다가 넣어준다. 

 

또 @Autowired의 문제점은 자동으로 찾아서 넣어주기 때문에 만약 찾을 수 없다면 에러가 발생한다.

이런 null 값이 있을 경우도 생각해야 하는데, 이럴 땐 @Autowired(required=false)를 넣어주면 null이 와도 아무 문제 없이 출력된다. (단, exam이 null이라는 if문이 있어야 정상작동)