Spring XML配置示例

时间:2020-01-09 10:44:36  来源:igfitidea点击:

在这个Spring XML配置示例中,我们将看到如何创建一个Spring应用程序,其中使用XML配置完成bean声明和bean依赖项配置。

对于此Spring XML配置示例,Maven构建工具用于管理依赖项。请参阅在Eclipse中使用Maven创建Java项目,以了解如何创建Maven项目。

Maven依赖

对于此示例,我们需要spring核心和spring上下文依赖项。使用的Spring版本是5.1.8 Release,该版本在pom.xml中的properties元素下定义。

Spring核心提供了基本框架类和与其他模块进行交互的类。

Spring上下文模块提供了org.springframework.context.ApplicationContext接口,该接口表示Spring IoC容器,并负责实例化,配置和组装Bean。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.theitroad</groupId>
  <artifactId>SpringProject</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>SpringProject</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <spring.version>5.1.8.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
      <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency> 
  </dependencies>
</project>

豆类

在示例中,有一个用于下订单的类,称为Order,可以从商店进行购买。 Order and Store bean和bean依赖项将使用Spring XML配置进行配置。

public interface IStore {
  public void doPurchase(int items);
}
public class Store implements IStore {
  public void doPurchase(int items) {
    System.out.println("Doing purchase of " + items +" Items");
  }
}
public class Order {
  private IStore store;
  private int items;
  public Order(IStore store, int items) {
    this.store = store;
    this.items = items;
  }
  public void setStore(IStore store) {
    this.store = store;
  }

  public void buyItems() {
    store.doPurchase(items);
  }
}

从类中可以看到,Order依赖于Store(Order类中的Store字段是IStore类型)。

Spring XML配置

在src / main / resources包中创建一个XML文件appContext.xml。此XML文件用于创建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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd">
          
  <!-- Store bean --> 
  <bean id="store" class="com.theitroad.SpringProject.Store" />           
  <!-- Order bean with dependencies -->
  <bean id="order" class="com.theitroad.SpringProject.Order">
    <constructor-arg ref="store" />
    <constructor-arg type="int" value="20" />
  </bean>
</beans>

请注意,这里将依赖项作为构造函数依赖项注入进行注入。

我们可以将以下类与main方法一起使用以读取配置并调用bean方法。 Spring框架中有几种ApplicationContext接口的实现。在独立应用程序中,通常创建ClassPathXmlApplicationContext或者FileSystemXmlApplicationContext的实例。

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
  public static void main( String[] args ){
    // create context using configuration
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("appcontext.xml");
    Order order = context.getBean("order", Order.class);
    order.buyItems();
    // close the context
    context.close();
  }
}

输出:

17:48:34.049 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader
- Loaded 2 bean definitions from class path resource [appcontext.xml]
17:48:34.173 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - 
Creating shared instance of singleton bean 'store'
17:48:34.217 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - 
Creating shared instance of singleton bean 'order'
Doing purchase of 20 Items