티스토리 뷰
스프링 컨테이너는 자바 객체를 생성하고 연결하고 구성하는 객체의 생명주기를 관리한다. (컨테이너는 스프링의 핵심 !)
이렇게 스프링 컨테이너에서 관리되는 객체를 스프링에서 Spring Bean 이라고 한다.
Spring Container 종류
BeanFactory
스프링 컨테이너의 최상위 인터페이스이다.
스프링 빈을 관리하고 조회하는 역할을 담당한다.
스프링 Bean과 관련된 대부분 기능(getBean() 포함)은 BeanFactory가 제공한다.
ApplicationContext
BeanFactory의 기능을 모두 상속받아 제공한다.
대부분의 Bean 관련 기능은 BeanFactory가 제공하지만, ApplicationContext는 아래와 같이 여러 인터페이스들을 상속 받아 더 다양한 기능을 제공한다.
따라서, BeanFactory를 직접 사용하는 일은 거의 없고 부가 기능이 포함된 ApplicationContext를 사용한다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
보통 Bean은 메서드 이름으로 등록되어 있다.
하지만 Bean 이름을 변경하고자 할 땐 @Bean(name="myBean")
으로 설정하면 된다.
- Bean 이름은 항상 다른 이름을 가져야 한다.
만약 같게 될 경우 다른 Bean이 무시되거나 기존 Bean을 덮어버리거나 설정에 따라 오류가 발생할 수도 있다.
public class MyApp {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
MemberRepository memberRepository = applicationContext.getBean("memberRepository", MemberRepository.class);
//service 를 통해서 회원가입하기
Member member = new Member(1L, "김세영");
memberService.join(member);
//repository 를 통해서 회원가입하기
Member member2 = new Member(2L, "홍길동");
memberRepository.save(member);
}
}
ApplicationContext(스프링 컨테이너)는 AppConfig 클래스를 설정 정보로 사용한다.
따라서 AppConfig 클래스에 Bean으로 등록되어 있는 메서드를 모두 호출하여 반환된 객체를 스프링 컨테이너에 등록하고 관리한다.
위 메인함수를 실행할 경우 아래와 같이 로그가 발생한다.
스프링 컨테이너에 내가 설정한 Bean이 등록된 것이다.
23:28:04.715 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig'
23:28:04.741 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberService'
23:28:04.779 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberRepository'
참고
'Framework > Spring' 카테고리의 다른 글
[Spring] Component Scan (0) | 2022.08.24 |
---|---|
[Spring] Singleton Container (0) | 2022.08.22 |
[JPA] 영속성 (0) | 2022.08.09 |
[JPA] JPA (0) | 2022.08.08 |
[JPA] View Table (0) | 2022.07.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자동구성
- Security
- 추상클래스
- nosql
- Load Balancer
- HashSet
- java
- Caching
- 오블완
- fail-safe
- @conditional
- Sticky Session
- 로드 밸런서
- 정적변수
- Spring
- 고정 세션
- JPA
- 인터페이스
- fail-fast
- 다중화
- syncronized
- HashMap
- Hash
- Red-Black Tree
- object
- 인스턴스변수
- spring boot
- AutoConfiguration
- nginx
- 티스토리챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함