필드 주입은 클래스가 작업을 수행하기 위해 필요한 것을 얻는 깔끔한 방법처럼 보이지만, 실제로는 모든 너의 클래스의 생성자가 private 이 아닌 이상 NullPointerException 이 발생하는 것을 기다리고 있는 것과 같습니다. 왜나하면 JSR-330 을 준수한 의존성 주입 프레임워크(Spring, Guice, …) 에 의해 인스턴스화된 것이 아닌 호출자에 의해 생성된 클래스 인스턴스들은 필드 주입을 수행할 수 없기 때문입니다.
@Inject
어노테이션을 사용하는 대신 필요한 필드를 생성자 및 생성자의 매개변수로 이동해야합니다.
이 규칙은 private 이 아닌 생성자를 가진 클래스(default constructor 를 포함한)가 필드 주입을 사용할 때 문제를 제기합니다.
규칙을 어긴 코드
class MyComponent { // 누구나 기본 생성자를 호출할 수 있습니다.
@Inject MyCollaborator collaborator; // 규칙을 어긴 코드
public void myBusinessMethod() {
collaborator.doSomething(); // 이 메소드는 호출자의 의해 생성된 클래스에서 실패합니다.
}
}
규칙을 준수한 해결책
class MyComponent {
private final MyCollaborator collaborator;
@Inject
public MyComponent(MyCollaborator collaborator) {
Assert.notNull(collaborator, "MyCollaborator must not be null!");
this.collaborator = collaborator;
}
public void myBusinessMethod() {
collaborator.doSomething();
}
}
If you like SONARKUBE, don’t forget to give me a star.