[스프링 핵심 원리]-3

EarlyBird·2021년 10월 31일
0

스프링 핵심 원리

목록 보기
3/6
post-thumbnail

김영한님의 스프링 핵심 원리 강의 학습 내용입니다.

스프링으로 전환

@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }
//...
}
  • @Configuration : 설정정보
  • @Bean : 스프링 컨테이너에 등록
public class MemberApp {

    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        //(name(메서드 이름), 타입)
        MemberService memberService = applicationContext.getBean("memberService", MemberService.class);

        //...
}
  • AppConfig에 있는 (@Configuration이 붙은)설정정보를 가지고 (@Bean이 붙은)메서드를 모두 호출해 반환된 객체를 스프링 컨테이너에 등록, 관리
  • 스프링 빈은 (@Bean이 붙은)메서드 명을 이름으로 사용한다.
  • ApplicationContext : 스프링 컨테이너
  • ApplicationContext는 인터페이스
  • new AnnotationConfigApplicationContext(AppConfig.class);는 ApplicationContext 인터페이스의 구현체

컨테이너에 등록된 빈 조회

    @Test
    @DisplayName("애플리케이션 빈 출력하기")
    void findApplicationBean(){
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        //iter + tab
        for (String beanDefinitionName : beanDefinitionNames) {
            BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);

            if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
                Object bean = ac.getBean(beanDefinitionName);
                System.out.println("name = " + beanDefinitionName + "object = " + bean);
            }
        }
    }
  • AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
  • getBeanDefinitionNames(); : 스프링에 등록된 모든 빈 이름을 조회
  • getBean(); : 빈 이름으로 빈 객체를 조회
  • getBean(빈 이름, 타입), getBean(타입)
  • getBeanDefinition : 빈 하나하나에 대한 메타데이터 정보
  • getRole() -> ROLE_APPLICATION : 사용자가 정의한 빈
  • getRole() -> ROLE_INFRASTRUCTURE : 스프링 내부에서 사용하는 빈

AnnotationConfigApplicationContext -> ApplicationContext -> BeanFactory

  • BeanFactory

    • 스프링 컨테이너의 최상위 인터페이스
    • 스프링 빈 관리, 조회
    • getBean() 제공
  • ApplicationContext

    • BeanFactory기능 모두 상속받아 제공
    • 빈 관리기능 + 부가 기능
  • 거의 ApplicationContext를 사용

  • BeanFactory, ApplicationContext를 스프링 컨테이너라 한다.

profile
안되면 되게 합시다

0개의 댓글

관련 채용 정보