Java Spring несколько ApplicationContext

Определение spring ApplicationContext очень неоднозначно, я почти закончу целую книгу учебника, но до сих пор не могу понять, что означает ApplicationContext.

В соответствии с API spring ApplicationContext:

  • Центральный интерфейс для настройки конфигурации приложения. Это доступно только для чтения, пока приложение запущено, но может быть перезагружено, если реализация поддерживает это.

  • Корневой интерфейс для доступа к контейнеру spring bean. Это основной клиентский вид контейнера bean.

Сверху мои вопросы:

1) Я продолжаю видеть в книге упомянутый "контейнер", к чему относится контейнер? Один контейнер означает один java-процесс? или один контейнер относится к одному объекту ApplicationContext?

2) Если я создаю два ApplicationContext в одном приложении Java (оба в main body), являются ли эти два интерфейса одним центральным контейнером? Или два отдельных экземпляра? См. Код ниже, в чем разница между context1 и context2? Если в Beans.xml есть Singleton, он вызывается context1 и context2, являются ли они двумя отдельными экземплярами или одним и тем же экземпляром?

ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml");

Ответ 1

В контейнере они относятся к ядру spring Inversion of Control container. Контейнер обеспечивает способ инициализации/загрузки вашего приложения (загрузка конфигурации в xml файлах или аннотации) с помощью reflection и управление жизненным циклом Java объекты, которые называются beans или управляемыми объектами.

Во время этой начальной фазы у вас нет (как правило, еще возможно) управления в вашем приложении, вместо этого вы получите полностью инициализированное состояние для приложения, когда выполняется самозагрузка (или ничего, в случае его отказа),

Это замена или, возможно, дополнение к тому, что называется контейнером EJB3; тем не менее, spring при условии, что он не соответствует стандарту EJB. Исторически, внедрение EJB было ограничено сложностью этой спецификации, при этом spring был вновь созданным проектом для сопоставимых функций EJB3, работающих на jvm J2SE и без контейнера EJB, и с гораздо более легкой конфигурацией.

ApplicationContext (как интерфейс, а также с помощью прямых реализаций) является средством реализации этого контейнера IoC, в отличие от BeanFactory, который теперь (редко используемый и более прямой способ управления beans, который, кстати, предоставляет базовые возможности реализации для ApplicationContext.

В соответствии с вашим вторым вопросом вы можете иметь несколько экземпляров ApplicationContexts, в этом случае они будут полностью изолированы, каждый со своей собственной конфигурацией.

Ответ 2

Сначала вы задаете вопросы:

1) Я продолжаю видеть в книге упомянутый "контейнер", к чему относится контейнер? Один контейнер означает один java-процесс? или один контейнер относится к одному объекту ApplicationContext?

ApplicationContext - это центральный интерфейс, но базовый контейнер - BeanFactory. Точнее, BeanFactory - это интерфейс нижнего уровня, реализованный всеми контекстами приложения, из которых вы получаете Beans. В этом смысле, я думаю, что контейнер слова стоит здесь для BeanFactory - по одному на ApplicationContext.

2) Если я создаю два приложения ApplicationContext в одном приложении Java (один основной), являются ли эти два интерфейса одним центральным контейнером? Или два отдельных разных экземпляра? См. Код ниже, какова разница между context1 и context2? Если есть один синглтон в Beans.xml, он вызывается контекстом1 и context2, являются ли они двумя отдельными экземплярами или одним и тем же экземпляром?

ApplicationContext context1 = new ClassPaспасибоmlApplicationContext ( "Beans.xml" ); ApplicationContext context2 = new ClassPaспасибоmlApplicationContext ( "Beans.xml" ); >

С помощью этих instanciations вы получите 2 полностью независимых контекста приложения. Один bean, объявленный первым, не будет найден в другом.

НО

Обычно в веб-приложении имеется более одного контекста приложения, поскольку Spring имеет понятие иерархии ApplicationContext. Вы можете объявить их как:

ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml", context1);>

Здесь вы можете извлечь из context1 только beans, объявленного в нем, но из context2 вы получите beans из context2 и context1. В частности, beans сначала просматриваются в context2, а если не найдены, то искать в context1.

Это используется в Spring MVC, где обычно имеется один корневой контекст (для всех beans, не связанных напрямую с MVC DispatcherServlet) и один дочерний контекст, посвященный DispatcherServlet, который будет содержать beans для контроллеров, просмотров, перехватчиков и т.д.

Ответ 3

Я продолжаю видеть в книге упомянутый "контейнер", что такое контейнер Ссылаться на? Один контейнер означает один java-процесс? или один контейнер ссылаются на один объект ApplicationContext?

Здесь контейнер означает контейнер spring, который не что иное, как ApplicationContext. Это внутренне считывает конфигурацию spring и загружает классы на основе конфигурации. Вы можете подумать, что это SpringProcessor, который предоставляет различные функции, такие как bean инициализация, инъекция, i18n, bean Post processing etc с полки

с

ApplicationContext context1 = new ClassPaспасибоmlApplicationContext ( "Beans.xml" ); ApplicationContext context2 = new ClassPaспасибоmlApplicationContext ( "Beans.xml" );

Там будет два conatiners, поэтому два синглета beans. Здесь singleton означает одиночный экземпляр на контейнер. В идеале у вас должен быть только один контейнер до тех пор, пока у вас не будет причины для двух. Для целей обучения имеет смысл понимать понятия

Ответ 4

1) container - это объект Java, экземпляр одной из реализаций ApplicationContext, например ClassPaспасибоmlApplicationContext.

2) Это 2 разных контейнера, если Beans.xml имеет singleton bean B1, тогда context1.getBean( "B1" ) и context2.getBean( "B1" ) возвратят 2 разных экземпляра B1

Ответ 5

ApplicationContext - это реализация контейнера Spring. Простыми словами Spring контейнер управляет всем приложением Spring через ApplicationContext. Контейнер Spring через ApplicationContext управляет жизненным циклом Spring bean i; e от начала до уничтожения.

A Spring контейнер вложен внутри контейнера J2EE.

Я продолжаю видеть в книге упомянутый "контейнер", что такое контейнер Ссылаться на? Один контейнер означает один java-процесс? или один контейнер ссылаются на один объект ApplicationContext?

Контейнер управляет жизненным циклом объекта. Tomcat - пример контейнера. Точно так же, как контейнер Spring управляет приложением через ApplicationContext контейнер J2EE Tomcat управляет приложением через web.xml

Контейнер обеспечивает поддержку связи. Безопасность в веб-приложении. Поддержка JSP, интернационализация, распространение событий и многие другие функции. Он поддерживает многопоточность, генерирует новый поток для каждого запроса ресурса. Вам не нужно явно писать код для этого. Так же, как контейнер Spring, контейнер J2ee управляет жизненным циклом сервлета.

Если я создаю два приложения ApplicationContext в одном приложении Java (один Основной корпус), являются ли эти два интерфейса для одного центрального контейнера?

Если вы хотите создать несколько приложений ApplicationContext в своем приложении. Он будет находиться в иерархии родительских дочерних элементов. Там будет один корневой ApplicationContext, а затем будет дочерний ApplicationContext, соответствующий каждому DispatcherServlet. Beans глобальный для приложения будет определен в корневом ApplicationContext. Все ApplicationContexts будут управляться только одним контейнером Spring.

Ответ 6

Вы добавили тег "java-ee". Spring часто используется в веб-приложениях, запущенных на сервере приложений. Обычно каждое веб-приложение будет иметь собственное приложение. Веб-приложения разделены и, вероятно, это то, что называется контейнером в документации, поскольку вы не можете регулярно обмениваться переменными с различными приложениями/контейнерами.

В приложении могут быть два контекста. Если у вас есть два контекста, каждый из них будет иметь свой собственный синглтон.