필드주입 대신 생성자 주입을 사용해야합니다.

 

필드 주입은 클래스가 작업을 수행하기 위해 필요한 것을 얻는 깔끔한 방법처럼 보이지만, 실제로는 모든 너의 클래스의 생성자가 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. :star2:

원문으로 바로가기

Star This Project