关于在Spring Framework应用程序中使用Beans.xml配置文件

时间:2013-01-19 21:33:51

标签: java spring configuration frameworks

我正在学习Spring MVC。今天,试图理解如何实现JDBC DAO,我在Spring(Spring,而不是Spring MVC)中找到了这个“Hello World”,我开始看到它(因为我认为要实现DAO我必须创建一个单独的Spring执行数据访问的项目......)

http://www.tutorialspoint.com/spring/spring_hello_world_example.htm

好的,这是一个独立的应用程序,这不是一个Web应用程序,因此它没有Web应用程序结构(WEB-INF文件夹,web.xml文件和我在Web中的调度程序servlet配置文件)应用)

在此示例中,我有一个 Beans.xml 配置文件,用于为不同的bean分配唯一ID,并控制具有不同值的对象的创建,而不会影响任何Spring源文件。 ..

例如,在此示例中,我使用 Beans.xml 文件传递“message”变量的“Hello World”消息值,因此我可以打印此值而不会影响 HelloWorld。 java MainApp.java 文件

<?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-3.0.xsd">

   <bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

所以我对你有一些疑问:

  1. 此文件是配置我的 Bean Factory 的文件吗?我认为,除了传递一个文本值作为变量的值,我还可以将bean作为另一个bean的依赖项注入。

    是不是?

  2. 在此示例中,我是否可以不使用 Beans.xml 文件并使用代替注释系统?

2 个答案:

答案 0 :(得分:17)

1) Beans.xml (实际上您可以根据需要命名)是 Spring配置文件。它包含configuration metadata

来自官方的Spring文档:

  

5.2.1配置元数据

     

如上图所示,Spring IoC容器消耗了一个   配置元数据的形式;此配置元数据表示   作为应用程序开发人员如何告诉Spring容器   在应用程序中实例化,配置和组装对象。

传统上,配置元数据以简单直观的XML格式提供,但它不是唯一允许的配置元数据形式(请参阅第二个问题的答案)

是的,你是对的:你可以注入另一个bean作为参考。

来自官方的Spring文档:

  

5.3 Bean概述

     

Spring IoC容器管理一个或多个bean。这些豆子是   使用您提供给的配置元数据创建   容器,例如,以XML定义的形式。

     

在容器本身中,这些bean定义表示为   BeanDefinition对象,包含(以及其他信息)   以下元数据:

     
      
  • 包限定类名:通常是正在定义的bean的实际实现类。

  •   
  • Bean行为配置元素,它说明了bean在容器中的行为方式(范围,生命周期回调等)   等)。

  •   
  • 对bean执行其工作所需的其他bean 的引用;这些引用也称为collaborators or dependencies

  •   
  • 要在新创建的对象中设置的其他配置设置,例如,在管理a的bean中使用的连接数   连接池,或池的大小限制。

  •   


使用官方文档中对其他bean的引用的简单示例:

<?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.xsd">

    <bean id="exampleBean" class="examples.ExampleBean">
        <!-- setter injection using the nested <ref/> element -->
        <property name="beanOne">
            <ref bean="anotherExampleBean"/>
        </property>

        <!-- setter injection using the neater 'ref' attribute -->
        <property name="beanTwo" ref="yetAnotherBean"/>
        <property name="integerProperty" value="1"/>
    </bean>

    <bean id="anotherExampleBean" class="examples.AnotherBean"/>
    <bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

</beans>

<强> 2) 从官方的Spring文档:

  

5.2.1配置元数据

     

...

     

基于XML的元数据不是唯一允许的配置形式   元数据即可。 Spring IoC容器本身完全脱离了   实际编写此配置元数据的格式。

     

有关在Spring中使用其他形式的元数据的信息   容器,见:

     
      
  • Annotation-based configuration:   Spring 2.5引入了对基于注释的配置的支持   元数据。

  •   
  • Java-based configuration:   从Spring 3.0开始,Spring提供了许多功能   JavaConfig项目成为核心Spring Framework的一部分。因此你   可以使用Java定义应用程序类外部的bean   而不是XML文件。要使用这些新功能,请参阅   @Configuration@Bean@Import@DependsOn注释。

  •   

另请阅读:
Spring Without XML: The Basics of Spring Annotations vs. Spring XML Files

答案 1 :(得分:2)

我创建了一个文件夹/src/main/resources/并将此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-4.3.xsd">

 <bean id="employee" class="HelloSpring.Employee">
 <property name="name" value="test spring"></property>
 </bean>
</beans>

成功了!

我这样访问它:

package HelloSpring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Customer {

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("./beans.xml");

        Employee obj = (Employee) ctx.getBean("employee");
        obj.displayName();
    }
}