[SPRING] Java Spring 다중 ApplicationContext
SPRINGJava Spring 다중 ApplicationContext
Spring ApplicationContext의 정의는 매우 모호하다. 거의 모든 튜토리얼을 끝내지 만 여전히 ApplicationContext가 무엇인지를 이해할 수 없다.
Spring API에 따르면 ApplicationContext는 다음과 같습니다.
위에서 내 질문은 다음과 같습니다.
1) "컨테이너"라고 언급 된 책을 계속 볼 수 있는데, 컨테이너는 무엇을 참조합니까? 하나의 컨테이너는 하나의 자바 프로세스를 의미합니까? 또는 하나의 컨테이너가 하나의 ApplicationContext 객체를 참조합니까?
2) 하나의 Java 응용 프로그램에서 두 ApplicationContext (둘 다 본체에 있음)를 인스턴스화하면이 두 인터페이스가 하나의 중앙 컨테이너에 있습니까? 아니면 두 개의 별도 인스턴스? 아래 코드를 참조하십시오. context1과 context2의 차이점은 무엇입니까? Beans.xml에 Singleton이 있으면 context1과 context2에 의해 호출됩니다. 두 개의 분리 된 인스턴스 또는 동일한 인스턴스입니까?
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");
해결법
-
==============================
1.컨테이너는 코어 스프링 반전 제어 컨테이너를 나타냅니다. 컨테이너는 리플렉션을 사용하여 애플리케이션을 초기화 / 부트 스트랩 (XML 파일 또는 주석으로 구성로드)하고 Bean 또는 관리 객체라고하는 Java 객체의 라이프 사이클을 관리하는 방법을 제공합니다.
컨테이너는 코어 스프링 반전 제어 컨테이너를 나타냅니다. 컨테이너는 리플렉션을 사용하여 애플리케이션을 초기화 / 부트 스트랩 (XML 파일 또는 주석으로 구성로드)하고 Bean 또는 관리 객체라고하는 Java 객체의 라이프 사이클을 관리하는 방법을 제공합니다.
이 초기 단계에서는 응용 프로그램에서 (일반적으로는 가능하지만) 제어권이 없으므로 부트 스트랩이 완료 될 때 응용 프로그램에 대해 완전히 초기화 된 상태가됩니다 (또는 실패 할 경우 아무 것도 아님).
이는 EJB3 컨테이너라고하는 것을 대체하거나 추가 할 수 있습니다. 그러나 스프링이 EJB 정의 표준을 준수하지 못하면 제공됩니다. 역사적으로, EJB의 채택은 J2SE jvm에서 실행되는 EJB3 비교 기능을 EJB 컨테이너없이 실행하고 훨씬 쉽게 구성 할 수있게하기 위해 새로 생성 된 프로젝트 인 Spring의 사양의 복잡성으로 인해 제한되었습니다.
ApplicationContext (인터페이스 및 직접 구현의 맛)는 BeanFactory와는 대조적으로이 IoC 컨테이너를 구현하는 수단입니다. BeanFactory는 이제 콩을 관리하는 직접적인 방식으로 사용되고 있습니다. ApplicationContext의 기본 구현 기능.
두 번째 질문에 따라 ApplicationContext의 인스턴스를 여러 개 가질 수 있습니다.이 경우 ApplicationContext는 완전히 격리되고 각각은 자체 구성을 갖습니다.
-
==============================
2.먼저 질문 :
먼저 질문 :
ApplicationContext는 중앙 인터페이스이지만 기본 컨테이너는 BeanFactory입니다. 보다 정확하게, BeanFactory는 Bean을 가져 오는 모든 응용 프로그램 컨텍스트에서 구현되는 하위 인터페이스입니다. 그런 의미에서, 컨테이너라는 단어가 BeanFactory를 위해 여기에 있다고 생각합니다. 하나는 ApplicationContext 당 하나입니다.
그러한 인스턴스화를 통해 2 개의 완전히 독립적 인 응용 프로그램 컨텍스트를 얻게됩니다. 처음에 선언 된 bean 하나는 다른 bean에서 발견되지 않습니다.
그러나
Spring은 ApplicationContext의 개념을 가지고 있기 때문에 웹 애플리케이션에 하나 이상의 애플리케이션 컨텍스트를 갖는 것이 일반적이다. 다음과 같이 선언 할 수 있습니다.
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml"); ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml", context1);>
여기서 context1에서 선언 된 bean 만 검색 할 수 있지만 context2에서 context2 및 context1에서 bean을 검색합니다. 구체적으로, bean은 context2에서 먼저 찾고, 발견되지 않으면 context1에서 찾는다.
이것은 일반적으로 MVC DispatcherServlet과 직접적으로 관련이없는 모든 빈에 대한 하나의 루트 컨텍스트와 컨트롤러, 뷰, 인터셉터 등에 대한 Bean을 포함 할 DispatcherServlet 전용의 하나의 하위 컨텍스트가있는 Spring MVC에서 사용됩니다.
-
==============================
3.여기서 컨테이너 란 ApplicationContext 이외의 Spring 컨테이너를 의미한다. 내부적으로 스프링 구성을 읽고 구성을 기반으로 클래스를로드합니다. 당신은 bean 초기화, 주입, i18n, 빈 포스트 프로세싱 등과 같은 다양한 기능을 제공하는 SpringProcessor라고 생각할 수 있습니다.
여기서 컨테이너 란 ApplicationContext 이외의 Spring 컨테이너를 의미한다. 내부적으로 스프링 구성을 읽고 구성을 기반으로 클래스를로드합니다. 당신은 bean 초기화, 주입, i18n, 빈 포스트 프로세싱 등과 같은 다양한 기능을 제공하는 SpringProcessor라고 생각할 수 있습니다.
두 conatiners, 따라서 두 개의 싱글 톤 콩이있을 것입니다. 여기서 싱글 톤은 컨테이너 당 싱글 톤 인스턴스를 의미합니다. 이상적으로는 두 가지 이유가있을 때까지 한 용기를 가져야합니다. 학습 목적을 위해 개념을 이해하는 것이 이치에 맞습니다.
-
==============================
4.ApplicationContext는 Spring 컨테이너의 구현이다. 간단히 말해 Spring 컨테이너는 ApplicationContext를 통해 전체 Spring 애플리케이션을 관리한다. ApplicationContext를 통한 Spring 컨테이너는 Spring Bean의 생명주기를 시작부터 파괴까지 관리합니다.
ApplicationContext는 Spring 컨테이너의 구현이다. 간단히 말해 Spring 컨테이너는 ApplicationContext를 통해 전체 Spring 애플리케이션을 관리한다. ApplicationContext를 통한 Spring 컨테이너는 Spring Bean의 생명주기를 시작부터 파괴까지 관리합니다.
스프링 컨테이너는 J2EE 컨테이너 내에 중첩되어 있습니다.
컨테이너는 객체의 라이프 사이클을 관리합니다. Tomcat은 컨테이너의 예입니다. Spring 컨테이너가 J2EE 컨테이너 ApplicationContext를 통해 애플리케이션을 관리하는 것처럼 Tomcat은 web.xml을 통해 애플리케이션을 관리한다.
컨테이너는 통신 지원을 제공합니다. 웹 응용 프로그램의 보안. JSP 지원, 국제화, 이벤트 전파 및 기타 여러 기능. 그것은 다중 쓰레딩을 지원하고, 자원에 대한 모든 요청마다 새로운 쓰레드를 생성합니다. 이를 위해 명시 적으로 코드를 작성할 필요는 없습니다. 스프링 컨테이너처럼 J2EE 컨테이너는 서블릿 라이프 사이클을 관리합니다.
응용 프로그램에서 여러 ApplicationContext를 인스턴스화하려는 경우. 상위 하위 계층 구조에 있습니다. 하나의 루트 ApplicationContext가있을 것이고 모든 DispatcherServlet에 대한 자식 ApplicationContext가있을 것입니다. 응용 프로그램에 대한 전역 bean은 루트 ApplicationContext에 정의됩니다. 모든 ApplicationContext는 하나의 스프링 컨테이너로만 관리됩니다.
-
==============================
5.1) container는 ClassPathXmlApplicationContext와 같은 ApplicationContext 구현 중 하나의 인스턴스 인 Java 객체입니다.
1) container는 ClassPathXmlApplicationContext와 같은 ApplicationContext 구현 중 하나의 인스턴스 인 Java 객체입니다.
2) 두 개의 다른 컨테이너입니다. Beans.xml에 싱글 톤 bean B1이 있으면 context1.getBean ( "B1") 및 context2.getBean ( "B1")은 B1의 두 개의 다른 인스턴스를 반환합니다.
-
==============================
6."java-ee"태그를 추가했습니다. Spring은 애플리케이션 서버에서 실행되는 웹 애플리케이션에서 종종 사용된다. 일반적으로 각 웹 응용 프로그램에는 자체 응용 프로그램이 있습니다. 다른 응용 프로그램 / 컨테이너와 변수를 정기적으로 공유 할 수 없기 때문에 웹 응용 프로그램은 분리되어 있으며 아마 문서의 컨테이너라고합니다.
"java-ee"태그를 추가했습니다. Spring은 애플리케이션 서버에서 실행되는 웹 애플리케이션에서 종종 사용된다. 일반적으로 각 웹 응용 프로그램에는 자체 응용 프로그램이 있습니다. 다른 응용 프로그램 / 컨테이너와 변수를 정기적으로 공유 할 수 없기 때문에 웹 응용 프로그램은 분리되어 있으며 아마 문서의 컨테이너라고합니다.
응용 프로그램 내에서 두 개의 컨텍스트를 가질 수 있습니다. 두 개의 컨텍스트가있는 경우 각각 자체 싱글 톤을가집니다.
from https://stackoverflow.com/questions/29862681/java-spring-multiple-applicationcontext by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안 필터 체인 작동 방법 (0) | 2019.07.01 |
---|---|
[SPRING] 봄 부팅시 Tomcat에 대한 연결 시간 초과 증가 (0) | 2019.07.01 |
[SPRING] Spring은 프로덕션 용으로 하나의 application.properties를 사용하고 디버그 용으로 하나의 application.properties를 사용 (0) | 2019.06.27 |
[SPRING] JSON을 작성할 수 없습니다 : 무한 재귀 (StackOverflowError); 중첩 예외 봄 부팅 (0) | 2019.06.27 |
[SPRING] @ TransactionalEvents 및 @Rollback 테스트 (0) | 2019.06.27 |