스프링의 @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.