您的“关注”和“点赞”,是信任,是承认,是支持,是动力......html
如意见相佐,可留言。
本人必将不遗余力试图作到准确和全面,终其一辈子进行修改补充更新。web
经过具体实例演示 IoC 容器的使用,步骤以下所示。
本文使用的开发工具为:spring
Eclipse IDE for Enterprise Java Developers. Version: 2018-12 (4.10.0) Build id: 20181214-0600
工程项目是基础。在 Eclipse 中建立 Web 项目spring-demo
。apache
将 Spring 框架所需的 JAR 包复制到项目的 lib 目录中,并将其添加到类路径下(选中每一个 jar 包 → 右键 → Build Path → Add to Build Path),添加后的项目以下图所示:
微信
建立交给 Spring 来实例化的实现类。一般先建立 Dao 接口,再建立 Dao 接口的实现类。app
(1)先建立 Dao 接口框架
在项目的 src
目录下建立一个名为 com.manongajie.dao
的包,在该包中建立一个名为 UserDao
的接口,并在接口中添加一个 add() 抽象方法,以下所示:eclipse
package com.manongajie.dao; /** * Dao 接口(演示用) * * @author manongajie * */ public interface UserDao { public void add(); }
(2)建立 Dao 接口的实现类 UserDaoImpl
webapp
在 com.manongajie.ioc
包下建立 UserDao
的实现类 UserDaoImpl
,代码以下所示:ide
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 自己是基于 xml 配置来工做的,在使用 Spring 的过程当中不可避免的要编写大量 xml 配置,Spring 官方提供了这些 xml 文件的编写规范,这是经过提供 xml 的约束文件来实现的。
简单理解, xml 的约束实际上是一种限定 xml 文件写法的技术,主要分为两种:
.dtd
。.xsd
。Spring 提供了 Schema 格式的约束,来限定 Spring 配置文件的写法。
开发者能够经过阅读 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
便可。以下图所示:
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
便可。以下图所示:
在 src
目录下建立 Spring 的核心配置文件 applicationContext.xml
(这个 xml 文件名是能够自定义的),以下图所示:
选中咱们提早建立好的模版,肯定以后,以下图所示:
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 容器思想的工做机制。