[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코드를 이용하여 직접 등록

콩 맞다

등록된 빈(객체)는 아래의 이미지와 같이 컨테이너에 저장된다.

컨테이너에 담긴 콩들






스프링 컨테이너에 등록되는 빈(객체)는 대체로 싱글톤 방식으로 저장됨으로
단 하나의 객체만 등록되고, 괸리된다.

댓글

이 블로그의 인기 게시물

[sql] 테이블 생성