Spring框架是一个开放源代码的J2EE应用程序框架,由[Rod Johnson](https://baike.baidu.com/item/Rod Johnson/1423612)发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
整个Spring框架有很多jar包,我这里就拿4个Spring的基础包出来说明一下,正好对应了Spring核心容器的4个模块。
包名 | 说明 |
---|---|
spring-core-5.2.3.RELEASE.jar | 包含Spring框架基本的核心工具类,Spring其它组件都要用到这个包里的类 |
spring-beans-5.2.3.RELEASE.jar | 所有应用都要用到的jar包,包含访问配置文件、创建和管理Bean已经进行IoC和DI操作相关的所有类 |
spring-context-5.2.3.RELEASE.jar | Spring提供了在基础IoC功能上的扩展服务,还提供了许多企业级服务的支持,如任务调度、JNDI定位、缓存、邮件服务等以及各种视图层框架的封装等 |
spring-expression-5.2.3.RELEASE.jar | 定义了Spring的表达式语言 |
把有依赖关系的类放到容器中,解析出这些类的实例,就是依赖注入。目的是实现类的解耦。
把用到的Spring基础包复制放到lib里面
代码如下
package com.system.spring.dao;
public interface UserDao {
/**
* 定义一个login()方法
*/
public void login();
}
在impl目录下创建UserDaoImpl.java
package com.system.spring.impl;
import com.system.spring.dao.UserDao;
public class UserDaoImpl implements UserDao {
/**
* 实现login()方法
*/
@Override
public void login() {
System.out.println("UserDao -> login()");
}
}
在WEB-INF目录下创建一个spring包
在spring目录下面创建: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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 将指定类配置给Spring,让Spring创建其对象的实例-->
<bean id="userDao" class="com.system.spring.impl.UserDaoImpl" />
</beans>
在ioc_di目录下创建IoC.java
package com.system.spring.ioc_di;
import com.system.spring.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class IoC {
public static void main(String[] args) {
// 1.初始化Spring容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.通过容器获取userDao实例
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
// 3.调用实例中的login()方法
userDao.login();
}
}
点击下图所指的图标,即可成功运行项目。
成功运行,输出结果如下图所示:
从上面可以看出来,控制台成功输出了 UserDao -> login() ,在IoC.java里面,咱们并没有通过new关键字来创建UserDao接口的实现类对象,而是通过spring的容器来获取的实现对象,这就是Spring IoC(控制反转)的工作机制。
码云:https://gitee.com/djyalw/spring-spring-mvc-my-batis/tree/master/01.spring
从上面可以看出来,控制台成功输出了 UserDao -> login() ,在IoC.java里面,咱们并没有通过new关键字来创建UserDao接口的实现类对象,而是通过spring的容器来获取的实现对象,这就是Spring IoC(控制反转)的工作机制。