我正在学习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>
所以我对你有一些疑问:
此文件是配置我的 Bean Factory 的文件吗?我认为,除了传递一个文本值作为变量的值,我还可以将bean作为另一个bean的依赖项注入。
是不是?
在此示例中,我是否可以不使用 Beans.xml 文件并使用代替注释系统?
答案 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();
}
}