开启 Spring 之旅:第一个 Spring 程序 ![Spring][Eclipse 使用 Spring][Eclipse 配置 Spring 约束文件][Eclipse 配置 xml 模版]
您的“关注”和“点赞”,是信任,是认可,是支持,是动力......
如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。
具体案例:演示 IoC 容器的使用
通过具体实例演示 IoC 容器的使用,步骤如下所示。
本文使用的开发工具为:
Eclipse IDE for Enterprise Java Developers.
Version: 2018-12 (4.10.0)
Build id: 20181214-0600
第一步:创建工程项目
工程项目是基础。在 Eclipse 中创建 Web 项目spring-demo
。
将 Spring 框架所需的 JAR 包复制到项目的 lib 目录中,并将其添加到类路径下(选中每个 jar 包 → 右键 → Build Path → Add to Build Path),添加后的项目如下图所示:
第二步:创建实现类
创建交给 Spring 来实例化的实现类。通常先创建 Dao 接口,再创建 Dao 接口的实现类。
(1)先创建 Dao 接口
在项目的 src
目录下创建一个名为 com.manongajie.dao
的包,在该包中创建一个名为 UserDao
的接口,并在接口中添加一个 add() 抽象方法,如下所示:
package com.manongajie.dao;
/**
* Dao 接口(演示用)
*
* @author manongajie
*
*/
public interface UserDao {
public void add();
}
(2)创建 Dao 接口的实现类 UserDaoImpl
在 com.manongajie.ioc
包下创建 UserDao
的实现类 UserDaoImpl
,代码如下所示:
package com.manongajie.ioc;
import com.manongajie.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void add() {
// TODO Auto-generated method stub
System.out.println("添加了一个 user 。");
}
}
第三步:创建 Spring 配置文件
1 配置 Spring 约束
1.1 Spring 约束概述
Spring 本身是基于 xml 配置来工作的,在使用 Spring 的过程中不可避免的要编写大量 xml 配置,Spring 官方提供了这些 xml 文件的编写规范,这是通过提供 xml 的约束文件来实现的。
简单理解, xml 的约束其实是一种限定 xml 文件写法的技术,主要分为两种:
- DTD,通常文件的后缀
.dtd
。 - Schema,通常文件的后缀为
.xsd
。
Spring 提供了 Schema 格式的约束,来限定 Spring 配置文件的写法。
1.2 将 Spring 的约束文件交给 Eclipse 管理
开发者可以通过阅读 Spring 提供的约束文件来了解 Sprinig 的 xml 配置的写法。
但是,这么整的话会很麻烦,所以,通常我们会将约束文件交给开发工具管理(本文用的是 Eclipse),开发工具可以通过解析约束文件了解 xml 的写法,并在需要时为开发者提供标签提示。
如何将 Spring 的约束文件(这里只整 Spring beans 的约束文件)交给 Eclipse 来管理呢?
请参见以下步骤,
(1)找到 Spring 的约束文件,路径为:\spring-5.2.6.RELEASE-dist\spring-framework-5.2.6.RELEASE\schema\beans
。一步步打开存放 Spring 框架的目录spring-framework-5.2.6.RELEASE
,如下图所示:
打开此目录,如下图所示:
再打开schema
目录,如下图所示:
再打开beans
目录,就找到 Spring beans 约束文件了。如下图所示:
(2)打开 Eclipse 的 /Window/Preferences
,配置其中的XML Catalog
,如下图所示:
找到上图中的 ③ 按钮“Add”
,点击在新弹出的选项卡中导入上一步找到的spring-beans.xsd
文件,并设置好名称空间,通常是在自动识别的名称空间之后再加上/文件名
(/spring-beans.xsd
),点击OK
即可。如下图所示:
2 配置 xml 模版,用来快速生成 xml 文件
xml 文件模版代码,可以去官网获取,不同版本的 Spring 框架,配置文件头约束的写法是不同的,建议去官网获取。如下所示(spring 5.2.6 版本):
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
由于 Eclipse 不会自动生成如上所示的 xml 文件(至少本人所安装的 Eclipse 没有自动生成),需要手动敲写代码,可以看出来,一般人真记不住,得复制粘贴,比较麻烦。经常要用到的话,还是配置一个 xml 模版比较好,可以快速生成 所需的 xml 文件。
配置 xml 模版步骤如下所示:
(1)在 Eclipse 中的/Window/Preferences
中配置新模版,如下图所示:
(2)点击New
按钮,进入到New Template
选项框中,进行设置模版,全部搞定之后,点击OK
即可。如下图所示:
3 创建 Spring 配置文件(使用 xml 模版)和编写配置文件内容
3.1 创建 Spring 配置文件(使用 xml 模版)
在 src
目录下创建 Spring 的核心配置文件 applicationContext.xml
(这个 xml 文件名是可以自定义的),如下图所示:
选中我们提前创建好的模版,确定之后,如下图所示:
3.2 编写配置文件内容
applicationContext.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 2 到 5 行是 Spring 的约束配置 -->
<!-- 由 Spring 容器创建该类的实例对象:bean spring 管理的类都称为 bean
id 表示文件的唯一标识,不能重复,“驼峰命名法”首字母小写;
class 表示指定需要实例化的 Bean 的全限定类名(包名+类名)。 -->
<bean id="userDaoImpl" class="com.manongajie.ioc.UserDaoImpl"></bean>
<!-- 还可以设置别名标签:通过 IoC 容器获取 userDao 实例。applicationContext.getBean("user") -->
<alias name="userDaoImpl" alias="user"></alias>
</beans>
第四步:编写测试类
在 com.manongajie.test
包下创建测试类 SpringTest1
,并在该类中添加一个名为 test1()
的方法,代码如下所示:
package com.manongajie.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.manongajie.dao.UserDao;
public class SpringTest1 {
@Test
public void test1() {
// 定义Spring配置文件的路径
String xmlPath = "applicationContext.xml";
// 初始化 Spring 容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
// 通过 IoC 容器获取 userDao 实例。applicationContext.getBean(id)
//UserDao userDaoImpl = (UserDao) applicationContext.getBean("userDaoImpl");
// 通过 IoC 容器获取 userDao 实例。applicationContext.getBean(全限定类名.class)
UserDao userDaoImpl = (UserDao) applicationContext.getBean(com.manongajie.ioc.UserDaoImpl.class);
// 别名标签:通过 IoC 容器获取 userDao 实例。applicationContext.getBean("user")
// UserDao userDaoImpl = (UserDao) applicationContext.getBean("user");
// 调用 UserDao 的 add() 方法
userDaoImpl.add();
}
}
运行结果(使用 JUnit 测试运行 test1() 方法,运行成功后,控制台的输出结果):
添加了一个 user 。
由以上代码可以看出,在程序执行时,对象的创建并不是通过 new
一个类完成的,而是由 Spring 容器管理实现的。这就是 Spring IoC 容器思想的工作机制。