본문으로 바로가기

Spring에서 bean을 import 할 때 field injection은 피하는게 좋다. 아래와 같이 생성자에 넣어주도록 하자.

1
2
3
4
5
@Autowired
public MessageReceiveWorker(AmazonSQS sqsClient, ServerConfig serverConfig) {
   this.sqsClient = sqsClient;
   this.serverConfig = serverConfig;
}

cs


intelli j에서 아래와 같이 쓰면 

1
2
3
4
5
@Autowired
private AmazonSQS sqsClient;
    
@Autowired
private ServerConfig serverConfig;
cs


Field Injection(필드 인젝션)을 쓰지 말라고 경고 메세지가 나온다.

클래스에 필드로 바로 @Autowired를 쓰지 말라는 뜻이다.

그래서 맨 위 코드와 같이 생성자(constructor)에 @Autowired를 쓰면 di된다.

그리고 setter도 @Autowired가 된다고 한다.
일단은 생성자(constructor)에 @Autowired를 쓰는 코드로 조금씩 바꿔보는게 좋을 것 같다.

DI(의존성 주입)가 필요한 이유와 Spring에서 Field Injection보다 Constructor Injection이 권장되는 이유

end.





댓글을 달아 주세요