스프링 컴포넌트는 생성자 주입을 사용해야 합니다.

 

스프링의 @Controller, @Service 그리고 @Repository 클래스들은 기본적으로 애플리케이션에서 클래스의 인스턴스 하나만 인스턴스화되는 싱글톤 객체입니다. 일반적으로 이러한 클래스들은 logger 와 같은 적은 수의 static 멤버 변수들을 가지지만, 모든 non-static 멤벼 변수들은 스프링에 의해 관리되어야 하고 또한 필드 주입 대신 생성자 주입을 통해 주입되어야 합니다.

이 룰은 스프링 컴포넌트에서 non-static 멤버 변수가 Injection 어노테이션을 가지는 경우 문제를 제기합니다.

규칙을 어긴 코드

@Controller
public class HelloWorld {

    @Autowired
    private String name = null; // 규칙을 어긴 코드

}

규칙을 준수한 해결책

Spring 4.3 버전

@Controller
public class HelloWorld {

    private String name = null;

    HelloWorld(String name) {
        this.name = name;
    }
}

Spring 4.3 이전 버전

@Controller
public class HelloWorld {

    private String name = null;

    @Autowired
    HelloWorld(String name) {
    this.name = name;
    }
}

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project