理念:使现有的技术更加容易使用,整合了现有的技术框架。
官网:https://spring.io/projects/spring-framework#overview
官方下载地址: http://repo.spring.io/release/org/springframework/spring
GitHub:https://github.com/spring-projects/spring-framework
官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#spring-core
导入依赖
在maven repository 网站 https://mvnrepository.com/ 搜索spring,找到Spring Web MVC 和Spring JDBC,复制依赖
ps: 直接导webmvc的好处是其他包也会顺带都导入进去。
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
优点
- 开源免费框架(容器)
- 轻量级 非入侵式的框架
- 控制反转(IOC) 面向切面编程(AOP)
- 支持事务的处理,对框架整合的支持
总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!
七大模块
控制反转原型推导
- userDao接口
- UserDaoImpl实现类(实现Dao中接口里的方法)
- UserService业务接口(让用户调用的接口)
- UserServiceImpl业务实现类(调用DaoImpl里的方法实现)
用户实际调用的是业务层,无需接触dao层。
如果需求有更改,就需要改动service层的代码,如private UserDao userDao = new UserMysqlImpl();
当改动多时费时费力。
小白ps:
private UserDao userDao = new UserDaoImpl();
对于这句代码,就是一个声明,类比对象的实例化,也就是新声明一个Userdao 叫userDao,他可以调用Userdaoimpl中的所有方法。
转换思路:利用set进行动态实现值的注入!
测试代码
public class MyTest {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
((UserServiceImpl) userService).setUserDao(new UserMysqlImpl());
userService.getUser();
}
}
使用set注入后,无需每次都修改代码,程序不再具有主动性,而是被动的接受!
这种思想,从本质上解决了问题,程序员无需管理对象的创建,系统的耦合性大大降低,可以更加专注在业务的实现上。这就是IOC的原型。
本质
IoC是Spring框架的核心内容。
控制反转是一种通过描述(XML或注解)或通过第三方去生产或获取特定对象的方式。在Spring中,实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。