스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
컴포넌트 스캔과 자동 의존관계 설정
@Component 어노테이션이 있으면 스프링 빈으로 자동 등록된다.
이때 @Controller, @Service, @Repository 모두 @Component를 포함하고 있기 때문에 각자의 로직에 맞게 어노테이션을 붙여줘도 되는 것이다.
→ @Controller 컨트롤러가 스프링 빈으로 자동 동록되는 이유가 컴포넌트 스캔 때문이다.
스프링 빈 등록 이미지
- @Controller, @Service, @Repository는 @Component를 대체할 수 있다.
- 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 싱글톤으로 등록한다. (대부분 하나만 등록해서 공유한다)
우테코 문제를 풀 때도 InputView와 OutputView를 외부에서 주입했지만(Autowired를 사용하지 않고 파라미터를 통한 외부 주입) 가끔 주입할 이유를 못 느껴 private static final로 선언한 적도 있다. 지금 생각해 보니 View 부분은 실질적인 비즈니스 로직이 아니어서 그랬던 것 같다..(뇌피셜) 하지만 서비스를 제공하고 데이터를 저장하는 부분에서는 new를 호출하여 객체를 계속 생성하는 것이 좋지 않다고 확실히 느꼈다. 왜냐하면 하나의 Repository로 데이터를 공유하는 게 좋을 것 같은데 여러 클래스에서 계속 생성하다 보니 데이터 관리는 물론, 여러 방면에서 불필요함을 느꼈다. (스프링 빈을 등록할 때는 싱글톤으로 객체를 생성해 준다!!) 위 내용은 단순히 내가 코드를 짜면서 느낀 부분이라 정확하지 않을 수 있다. 더 찾아보면서 스프링 빈과 의존 관계를 이해하고자 한다.
자바의 기술들을 더 많이 효과적으로 쓰기 위해 스프링을 사용하는 것은 알고 있었지만, 나혼자 길을 헤매고 있었다는 사실을 깨달았다.
'Dev > Spring' 카테고리의 다른 글
[Spring] OCP, DIP를 위반하는 클라이언트 코드 고치기 (feat. DI) (0) | 2023.09.10 |
---|---|
[Spring] 스프링이란? (0) | 2023.09.03 |
[Spring] DI를 사용하여 구현 클래스 변경하기 (0) | 2023.09.01 |
[Spring] @ResponseBody (0) | 2023.08.31 |
[Spring] Error creating bean with name 'dataSourceScriptDatabaseInitializer' (0) | 2023.07.24 |