You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@Service 어노테이션을 통해 Bean으로 등록을 해주고, @Autowired 어노테이션을 통해 DI (Dependency Injection), 의존성 주입을 해주면 스프링 컨테이너가 연관된 객체를 찾아준다. Service는 Repository를 의존하고 있기 때문에 같은 방식으로 Repository는 Bean으로 등록해주고 생성자에 @Autowired 어노테이션을 작성해 연결시켜준다.
위 과정을 컴포넌트 스캔이라고 하는데 @Controller, @Service, @Repository 어노테이션을 달아줌으로써 컴포넌트로 관리하게 해주는 것이다. @Component만 명시해줘도 되지만 @Controller, @Service, @Repository 안에 소스를 까보면 모두 @Component 어노테이션을 갖고 있는 것을 확인할 수 있다. 어노테이션이 없으면 순수 자바 코드일 뿐이다.
프로젝트 내에 아무 클래스나 어노테이션을 작성한다고 되는 건 아니다. 동일 패키지 혹은 하위 패키지 내에 존재해야 스프링 컨테이너가 스캔할 수 있다.
📌 참고
스프링은 스프링 컨테이너에 빈을 등록할 때, default로 *singleton* 싱글톤으로 등록한다. (하나만 등록해서 공유한다는 것)
따라서 같은 스프링 빈이면 모두 같은 인스턴스다. 설정을 통해 바꿀 수 있지만 대부분 싱글톤을 사용한다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
스프링
Bean을 등록하는 방법으로 다음 두 가지 방법이 있다.컴포넌트 스캔과 자동 의존 관계 설정
View와Service를 연결해주기 위해서Controller가 필요하다.위와 같은 의존 관계를 갖고 있는데
Controller에서Service를 사용하기 위해 MemberRepository를 주입해줄 필요가 있다.이전 예제까지는
이런 방식으로 직접 생성해서 사용했는데 지금이야 MemberRepository를 사용하는 게 MemberController 하나지만, 여러 곳에서 사용하는 경우 그 클래스마다 새로 생성해야 한다. 스프링스럽게 개발하기 위해서
Bean으로 등록해서 사용해줘야 한다.여기서 바로 실행하면 에러가 발생한다. MemberService가
Bean으로 등록되어 있지 않기 때문이다.@Service어노테이션을 통해Bean으로 등록을 해주고,@Autowired어노테이션을 통해 DI (Dependency Injection), 의존성 주입을 해주면 스프링 컨테이너가 연관된 객체를 찾아준다. Service는 Repository를 의존하고 있기 때문에 같은 방식으로 Repository는Bean으로 등록해주고 생성자에@Autowired어노테이션을 작성해 연결시켜준다.위 과정을 컴포넌트 스캔이라고 하는데
@Controller,@Service,@Repository어노테이션을 달아줌으로써 컴포넌트로 관리하게 해주는 것이다.@Component만 명시해줘도 되지만@Controller,@Service,@Repository안에 소스를 까보면 모두@Component어노테이션을 갖고 있는 것을 확인할 수 있다. 어노테이션이 없으면 순수 자바 코드일 뿐이다.프로젝트 내에 아무 클래스나 어노테이션을 작성한다고 되는 건 아니다. 동일 패키지 혹은 하위 패키지 내에 존재해야 스프링 컨테이너가 스캔할 수 있다.
Java 코드로 직접 등록
SpringConfig.java파일 생성Controller의 경우는 스프링이 직접 관리해주기 때문에 그냥
@Controller어노테이션을 사용하여 컴포넌트 스캔함실무에서는 보통 컴포넌트 스캔 방식을 사용하며, 정형화 되지 않거나 상황에 따라 구현 클래스를 변경해야 할 경우에 설정을 통해 스프링 빈으로 등록한다.
참고 DI, 의존성 주입
Beta Was this translation helpful? Give feedback.
All reactions