SPRING-SOURCE.RU | |
|
|
Следующий рисунок графически показывает, как Spring может гибко менять реализацию математической операции или реализацию ResultWriter.
Кружок на рисунке – это Spring контейнер. Он читает конфигурационный файл beans.xml (описание контекста) и использует полученную информацию для связывания компонентов вместе. Описание контекста – это разновидность конфигурационного файла для создания приложения за пределами компонентов.
CalculateSpring – это основной класс, который на прямую не иницилизирует Operation или ResultWriter. Вместо этого эта задача выполняется Spring контейнером. Spring контейнер считывает конфигурационный файл beans.xml, иницилизирует бины и затем связывает их соответственно конфигурационной информации, содержащейся в beans.xml.
Способность соединять и рассоединять повторно используемые Java бины в приложении – это важная сторона Spring framework.
Суть в том, что CalculateSpring не сам работает с экземплярами Operation или ResultWriter, а делегирует эту задачу Spring контейнеру. Spring контейнер, в свою очередь, читайет конфигурационный файл и вызывает бин файл дескриптор.
package com.wrox.begspring; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class CalculateSpring { private Operation ops; private ResultWriter wtr; public void setOps(Operation ops) { this.ops = ops; } public void setWriter(ResultWriter writer) { this.wtr = writer; } public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); BeanFactory factory = (BeanFactory) context; CalculateSpring calc =(CalculateSpring) factory.getBean("opsbean"); calc.execute(args); } public void execute(String [] args) { long op1 = Long.parseLong(args[0]); long op2 = Long.parseLong(args[1]); wtr.showResult("The result of " + op1 + ops.getOpsName() + op2 + " is " + ops.operate(op1, op2) + "!"); } }
Создаем контекст, затем фабрику и при помощи фабрики достаем бин. ApplicationContext в Spring это тип BeanFactory. BeanFactory дает возможность доступа к JavaBeans которые иницилизированы, связанные и управляемые Spring контейнером.
Хотя есть и другие BeanFactory классы в Spring, ApplicationContext класс намного чаще используется, так как он снабжает нас несколькими ценными особенностями – включение поддержки для интернационализации, загрузка ресурсов, интеграция с внешними иерархиями конекстов и много чего еще.
Конструктор ClassPathXmlApplicationContext берет в качестве аргумента файл описания контекста или bean wiring файл. Этот файл называется beans.xml только лишь в наших примерах, вы же можете называть его как хотите, но следите, чтобы расширение файла было XML. Файл beans.xml – это конфигурационный файл, описывающий, как связывать объекты вместе. Здесь показан beans.xml файл:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="screen" class="com.wrox.begspring.ScreenWriter" /> <bean id="multiply" class="com.wrox.begspring.OpMultiply" /> <bean id="add" class="com.wrox.begspring.OpAdd" /> <bean id="opsbean" class="com.wrox.begspring.CalculateSpring"> <property name="ops" ref="multiply" /> <property name="writer" ref="screen"/> </bean> </beans>
ClassPathXmlApplicationContext – это часть Spring контейнера, и ищет контекстное описание (beans.xml) в Java VM CLASSPATH и создает из него экземпляр ApplicationContext. Spring контейнер связывает бины в ходе иницилизации ApplicationContext.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <(1)bean id="screen" class="com.wrox.begspring.ScreenWriter" /> <(2)bean id="multiply" class="com.wrox.begspring.OpMultiply" /> <(3)bean id="add" class="com.wrox.begspring.OpAdd" /> <(4)bean id="opsbean" class="com.wrox.begspring.CalculateSpring"> <(5)property name="ops" ref="multiply" /> <(6)property name="writer" ref="screen"/> </bean> </beans>
В xml файле каждый бин имеет id с уникальным именем.
Copyright © 2024 |