스프링은 스프링 컨테이너에 스프링빈을 등록하여 사용한다.
기본적으로는 싱글톤 (하나의 클래스에 하나의 객체만을 등록한후 공유)으로 등록한다.
즉, 같은 스프링 빈이면 모두 같은 인스턴스인 것이다.
<아니게 설정할 수 있지만, 대부분 싱글톤>
이 스프링빈을 등록하는 방법에는 2가지가 있다.
1. 컴포넌트 스캔
2. 자바 코드로 직접 스프링 빈 등록
정형화된 코드의 경우 컴포넌트 스캔방식을 주로 사용한다.
정형화 되어있지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 직접 스프링 빈으로 등록한다.
1. 컴포넌트 스캔
@Component 애노테이션이 있다면 스프링 빈으로 스프링 컨테이너에 객체로 자동 등록된다.
@Component를 포함하는
@Controller, @Service, @Repository도 스프링 빈으로 자동 등록이된다.
@Autowired는 스프링 컨테이너의 스프링 빈들을 연결시켜준다.(연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.)
이처럼 객체 의존관계를 외부에서 넣어주는 것을 DI(Dependency Injection)이라고 한다.
코드 예시 :
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
이렇게 @Controller가 있는 클래스인 MemberController는 스프링 컨테이너에 객체를 만들어 스프링이 들고있는다.
Memberservice 객체가 만들어지는데
@Service
public class MemberService {
}
이렇게 @service를 추가해주어 memberservice도 스프링 빈으로 등록되게 만들어준다.
그리고 @Autowired를 통해 연관된 객체를 스프링 컨테이너에서 찾아 넣어준다.
2. 자바 코드로 등록
SpringConfig라는 자바 파일을 따로 생성한다.
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
@Bean을 통해 memberService, memberRepository 스프링 빈 객체를 만들어준다.
'개발공부 > [spring]김영한_스프링입문' 카테고리의 다른 글
스프링 컨테이너와 스프링 빈_(feat.BeanDefinition) (0) | 2022.08.04 |
---|---|
DI(의존관계 주입)와 DI 컨테이너 (0) | 2022.08.04 |
좋은 객체 지향 설계의 원칙(SOLID) (0) | 2022.08.04 |
[1]회원 관리 예제 - 백엔드 개발[테스트 코드 작성,서비스와 리포지토리] (0) | 2022.07.14 |
[0]프로젝트 환경설정과 스프링 웹 개발 기초 (0) | 2022.07.13 |