ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ApplicationContext 란
    [공부] 프로그래밍/Spring・Spring Boot (JAVA) 2024. 4. 3. 16:54

     

    ApplicationContext

    스프링 프레임워크에서 중요한 개념 중 하나입니다. 애플리케이션 컨텍스트는 FactoryBean을 상속받는 스프링 컨테이너의 인터페이스이며, 스프링 애플리케이션을 설정하고 관리하는데 사용됩니다. 이를 통해 스프링 애플리케이션 내에서 빈(Bean)들을 관리하고 검색할 수 있습니다.

    ▷ 빈(Bean) 관리: 애플리케이션 컨텍스트는 스프링 빈(Bean)의 라이프사이클을 관리합니다. 빈의 생성, 초기화, 소멸 등을 담당합니다.

    ▷ 의존성 주입(Dependency Injection): 애플리케이션 콘텍스트는 빈들 간의 의존성을 관리하고 주입합니다. 이를 통해 빈들 간의 결합도를 낮추고 유연한 애플리케이션을 구축할 수 있습니다.

    ▷ 환경 설정 로딩: 스프링은 다양한 방식으로 설정 정보를 로딩할 수 있는데, 이를 애플리케이션 콘텍스트가 처리합니다. XML, 자바 기반 설정, 어노테이션 기반 설정 등 다양한 방식을 지원합니다.

    ▷ AOP(Aspect-Oriented Programming) 지원: 애플리케이션 콘텍스트는 AOP와 같은 고급 기능을 지원합니다. AOP를 사용하여 애플리케이션의 여러 부분에서 공통적으로 필요한 관심사를 분리하고 모듈화 할 수 있습니다.

    ▷ 이벤트 발행 및 구독: 애플리케이션 콘텍스트는 이벤트 발행 및 구독 기능을 제공합니다. 이를 통해 빈들 간의 통신이나 애플리케이션의 이벤트 기반 아키텍처를 구현할 수 있습니다.

    애플리케이션 콘텍스트는 ApplicationContext 인터페이스를 구현한 다양한 클래스로 구현될 수 있습니다. 가장 일반적인 구현체로는 ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, AnnotationConfigApplicationContext 등이 있습니다.

    ※ 필요한 이유

    ▷ new를 사용하여 객체 생성했을 때 :
    new를 사용하여 객체를 생성하면, 해당 객체는 스프링이 관리하는 빈으로 등록되지 않습니다. 그냥 자바 코드로 생성된 일반적인 객체입니다. 스프링은 new로 생성된 객체에 의존성을 주입할 수 없습니다. 다시 말해, 스프링은 이 객체들을 알지 못하기 때문에 필요한 의존성을 제공할 수 없습니다.

    ▷ Thread에서 @Autowired 사용할 때 :
    Thread 클래스(또는 다른 스프링에서 관리되지 않는 클래스)에 의존성을 @Autowired하려고 하면, 스프링은 주입을 수행하지 않습니다. 왜냐하면 스프링은 이러한 객체의 라이프사이클을 관리하지 않기 때문입니다. 결과적으로, Thread 내에서 @Autowired 의존성을 사용하려고 하면 해당 의존성이 null일 가능성이 높아지고, 사용하려고 하면 NullPointerException이 발생할 수 있습니다.

    위의 상황일 경우, @Autowired 대신 Bean 주입받는 방법은 ApplicationContext 사용하기
    ApplicationContext applicationContext = ApplicationContextUtil.getApplicationContext();
    applicationTestService = applicationContext.getBean(applicationTestService.class);
    applicationTestService.exec_test();
    • ApplicationContextUtil.getApplicationContext() 메서드를 호출하여 애플리케이션 컨텍스트를 가져옵니다. 이 애플리케이션 컨텍스트는 스프링 프레임워크의 일부분으로, 애플리케이션 내의 빈(Bean)들의 정보를 담고 있습니다.
    • 애플리케이션 콘텍스트에서 applicationTestService 클래스 형식의 빈을 가져옵니다.
    • 이전 단계에서 가져온 applicationTestService 빈의 exec_test() 메서드를 호출합니다.

     

    '[공부] 프로그래밍 > Spring・Spring Boot (JAVA)' 카테고리의 다른 글

    Scheduler 구현  (0) 2024.04.09
    MessageSource 처리  (0) 2024.04.04
    세션 처리  (0) 2024.04.03
    FreeMarker 설정  (0) 2024.04.03
    HTTP DELETE 처리  (2) 2024.04.02
Designed by Tistory.