[spring]스프링 빈과 의존관계 > 컴포넌트 스캔과 자동 의존관계 설정
*spring-boot에서 사용되는 "객체"는 모두 "컨테이너"라는 저장공간 안에서 관리된다.
*"컨테이너"안에서 특정 객체를 찾기위해선 반드시 어노테이션(표시)이 필요하다
spring-boot에서는 이를 "의존관계"라고 하는가??
| @Controller 어노테이션을 명시한다. |
"@Contorller"라는 어노테이션을 명시하여 해당 "객체"는 spring-boot (객체)컨테이너에서 꺼내사용할 수 있도록 한다.
| spring-boot는 객체를 컨테이너로 관리한다. |
보통 우리는 Controller에서 service을 호출하여 비즈니스을 수행하게 된다.
이때 Service객체를 "new"을 통해 인스턴스를 만들어서 비즈니스 함수를 호출하게되는데...
문제는 (인스턴스를 만든 service가) 하나의 Controller에서만 사용되는 service가 아닐 수 있지않나?
그러므로 이또한 (spring-boot의)컨테이너에 의해 (객체가)관리되도록 해야한다.
그러기 위해선 Service클래스에 "@Service"어노테이션을 명시해줘야 한다.
| @Service 어노테이션 사용 예 |
그리고 Controller에서는 (객체를 의존하고자하는(??))클래스에 "@Autowired"어노테이션을 명시한다.
| @AutoWired 어노테이션 사용 예 |
정리하자면, service객체를 가져다 사용하고자할때마다 "new"키워드를 사용하여 객체를 생성하기 보단
"@AutoWired"키워드를 사용하여 spring-boot의 컨테이너가 관리하고 있는 객체를 꺼내 쓰면 된다.
물론 Service에서도 데이터베이스 관련 로직을 수행하기 위해서 "Repository"객체를 사용하고자할 때
위와 같은 방식으로 사용하 되, 이때 사용하는 어노테이션은 "@Repository"을 사용한다.
| @Repository |
*빈(개발자가 사용하는 객체)을 등록하는 두가지 방법
1. 어노테이션(@Controller, @Servcie, @Repository, 등등 )을 이용하여 컨테이너에 등록
2. java코드를 이용하여 직접 등록
| 콩 맞다 |
등록된 빈(객체)는 아래의 이미지와 같이 컨테이너에 저장된다.
| 컨테이너에 담긴 콩들 |
스프링 컨테이너에 등록되는 빈(객체)는 대체로 싱글톤 방식으로 저장됨으로
단 하나의 객체만 등록되고, 괸리된다.
댓글
댓글 쓰기