Java Spring несколько ApplicationContext
определение весны ApplicationContext
очень неоднозначно, я почти закончил целую книгу учебника, но все еще не могу понять, что такое ApplicationContext
стенд для.
согласно весеннему API,ApplicationContext
- это:
Центральный интерфейс для настройки для приложения. Это доступно только для чтения во время работы приложения, но может быть перезагружено, если реализация поддерживает это.
в корневой интерфейс для доступа к контейнеру Spring bean. Это основное представление клиента контейнера bean.
сверху, мои вопросы:
1) я продолжаю видеть книгу, упомянутую "контейнер", на что ссылается контейнер? Один контейнер означает ли это один процесс java? или один контейнер относится к одному
6 ответов
контейнером они ссылаются на весну ядра инверсия контейнера управления. Контейнер предоставляет способ инициализации / начальной загрузки приложения (загрузка конфигурации в xml-файлы или аннотации) с помощью отражение, и управлять жизненным циклом объектов Java, которые называются фасоль или управляемые объекты.
На этом начальном этапе у вас нет (обычно, но это возможно) управления в ваше приложение вместо этого вы получите полностью инициализированное состояние для приложения, когда загрузка будет выполнена (или ничего, в случае сбоя).
это замена или, возможно, дополнение к тому, что называется контейнер EJB3, но весны не придерживаться EJB с определенными стандартом. Исторически, принятие EJB было ограничено сложностью этой спецификации, с весной, являющейся недавно созданным проектом для ejb3 сопоставимые функции, работающие на jvm J2SE и без контейнера EJB, и с гораздо более простой конфигурацией.
ApplicationContext
(Как интерфейс, и по прямой реализации вкусов) является средством реализации этого контейнера МОК, в отличие от BeanFactory
, который теперь (редко используется и)более прямой путь управления бобами, который, кстати, предоставляет базовые функции реализации для ApplicationContext.
по вашему второй вопрос: у вас может быть несколько экземпляров ApplicationContexts, в этом случае они будут полностью изолированы, каждый со своей конфигурацией.
первые вопросы :
1) я продолжаю видеть книгу, упомянутую "контейнер", на что ссылается контейнер? Один контейнер означает ли это один процесс java? или один контейнер ссылается на один объект ApplicationContext?
ApplicationContext является центральным интерфейсом, но базовый контейнер является BeanFactory
. Более точно, BeanFactory
- это интерфейс нижнего уровня, реализованный всеми контекстами приложений, из которых вы получаете бобы. В том смысл, я думаю, что слово контейнер стоит здесь BeanFactory
- по одному на ApplicationContext.
2) Если я создаю два экземпляра ApplicationContext в одном приложении java (один основной корпус), являются ли эти два интерфейса одним центральным контейнером? Или два отдельных разных экземпляра? См. код ниже, в чем разница между context1 и context2? Если есть синглтон в бобах.xml, он вызывается context1 и context2, они разделены экземпляр или тот же экземпляр?
ApplicationContext context1 = новый ClassPathXmlApplicationContext ("Beans.XML"); ApplicationContext context2 = новый ClassPathXmlApplicationContext ("Beans.xml");>
С этим instanciations, вы получите 2 совершенно независимых контекстов применения. Один боб, объявленный первым, не будет найден в другом.
но
обычно имеет более одного контекста приложения в веб-приложении, т. к. пружина имеет понятие hierachies из ApplicationContext. Вы можете объявить их как:
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml", context1);>
здесь вы можете получить от context1
только фасоль объявлена в нем, но от context2
вы получите бобы из context2
и context1
. В частности, бобы сначала ищут в context2
а если не нашли то искали в context1
.
это используется в Spring MVC, где у вас обычно есть один корневой контекст (для всех бобов не имеет прямого отношения к MVC DispatcherServlet
) и один дочерний контекст, посвященный DispatcherServlet
который будет содержать компоненты для контроллеров, представлений, перехватчиков и т. д.
Я продолжаю видеть книгу, упомянутую "контейнер", что такое контейнер обратиться? Один контейнер означает ли это один процесс java? или один контейнер относится к одному объекту ApplicationContext?
здесь контейнер означает контейнер spring, который является не чем иным, как ApplicationContext. Это внутренне считывает конфигурацию spring и загружает классы на основе конфигурации. Вы можете подумать, что это SpringProcessor, который предоставляет различные функции, такие как bean инициализация, инъекция, i18n, обработка бобов и т. д. с полки
С
ApplicationContext context1 = новый ClassPathXmlApplicationContext ("Beans.xml"); ApplicationContext context2 = новый ClassPathXmlApplicationContext ("Beans.xml");
там будет два conatiners , отсюда два синглтон бобы. Здесь singleton означает экземпляр singleton для каждого контейнера. В идеале у вас должен быть только один контейнер, пока и если у вас нет причины две. Для целей обучения имеет смысл понимать понятия
1) контейнер-это объект Java, экземпляр одной из реализаций ApplicationContext, таких как ClassPathXmlApplicationContext.
2)это 2 разных контейнера, если фасоль.xml имеет одноэлементный компонент B1, затем context1.getBean ("B1") и context2.getBean ("B1") вернет 2 разных экземпляра B1
ApplicationContext-это реализация контейнера Spring. Проще говоря, Spring container управляет всем приложением Spring через ApplicationContext. Контейнер весны через ApplicationContext управляет жизненным циклом фасоли весны i; e от инициирования к разрушению.
контейнер spring вложен внутри контейнера J2EE.
Я продолжаю видеть книгу, упомянутую "контейнер", что такое контейнер обратиться? Один контейнер означает один процесс java? или один контейнер относится к одному объекту ApplicationContext?
контейнер управляет жизненным циклом объекта. Tomcat является примером контейнера. Так же, как Spring container управляет приложением через ApplicationContext, контейнер J2EE Tomcat управляет приложением через интернет.в XML
контейнер обеспечивает поддержку коммуникаций. Безопасность в веб-приложении. Поддержка JSP, интернационализация, распространение событий и многие другие функции. Он поддерживает многопоточность создает новый поток для каждого запроса ресурса. Вам не нужно явно писать код для этого. Как и контейнер spring, контейнер J2ee управляет жизненным циклом сервлета.
Если я создаю два экземпляра ApplicationContext в одном приложении java (один Основной корпус), эти два интерфейса к одному центральному контейнеру?
Если вы хотите создать несколько экземпляров ApplicationContexts в вашем приложении. Это будет в Родительском ребенке иерархия. Будет один корневой ApplicationContext , а затем будет дочерний ApplicationContext, соответствующий каждому DispatcherServlet. Глобальные бобы для приложения будут определены в корневом ApplicationContext. Все ApplicationContexts будут управляться только одним контейнером spring.
вы добавили тег "java-ee". Весной часто используется в веб-приложениях, работающих на сервере приложений. Как правило, каждое веб-приложение будет иметь свое собственное приложение. Веб-приложения разделены и, вероятно, это то, что называется контейнером в документации, поскольку вы не можете регулярно обмениваться переменными с различными приложениями / контейнерами.
вы можете иметь два контекста в приложении. Если у вас есть два контекста, каждый будет иметь свой собственный синглтон.