8

我正在学习 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.javaMainApp.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文件并使用来代替注释系统吗?

4

2 回答 2

19

1)这个Beans.xml(其实你可以随便命名)是一个Spring配置文件。它包含一个配置元数据

来自官方 Spring 文档:

5.2.1 配置元数据

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

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

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

来自官方 Spring 文档:

5.3 Bean概述

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

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

  • 一个包限定的类名:通常是被定义的 bean 的实际实现类。

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

  • 对 bean 完成工作所需的其他 bean 的引用;这些引用也称为协作者依赖项

  • 要在新创建的对象中设置的其他配置设置,例如,在管理连接池的 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 容器中使用其他形式的元数据的信息,请参阅:

  • 基于注解的配置:Spring 2.5 引入了对基于注解的配置元数据的支持。

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

另请阅读:
没有 XML 的 Spring:Spring Annotations 与 Spring XML 文件的基础知识

于 2013-01-20T01:08:53.213 回答
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();
    }
}
于 2018-08-21T09:48:49.113 回答