Spring初识

框架

工具类严格意义上来说,也可以称为简陋的框架。
框架是一些类和接口的集合,是开发中的半成品。JAVA框架可以分为三层:表示层,业务层和物理层。

Spring

互联网开发时候,经历的技术阶段,分别有不同的技术:
单一应用架构
​ 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

垂直应用架构
​ 当访问量逐渐增大,提升效率的方法之一是把一个jar文件拆分为多个jar包处理。此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构
​ 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,使用多台服务器处理。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

流动计算架构
当服务越来越多,小服务资源浪费越来越明显,此时需要增加一个调度管理中心。SOA是关键。

java主流框架演变之路

1、jsp + servlet + javaBean
servlet:server applet 服务端小程序 对请求进行匹配处理。
jsp:java server page 可以在静态页面中内嵌java代码。已淘汰。
html中不能内嵌java代码

javaBean:定义的对象,反映的是现实世界某个具体事物的抽象(书、车……)
效率低、性能低。耦合度高。所以逐渐被淘汰。

2、MVC架构
把各个组件进行一个人为的分离。

Model View Control
在这里插入图片描述
客户端Browser作用:提交请求,接受响应。
提交请求后会提交给controller。
Controller:用来接收对应请求的处理。把请求进行转发。把对应的参数传给数据库里面进行查询。数据库里面的对象、表都可以用model进行表示。
当查询完对应的参数之后,会从数据库中返回对应的结果。会传到view层(html,jsp,前端框架),把数据进行一个渲染,然后再展示在页面。

3、EJB开发 重量级框架,使用麻烦
4、SSH (Structs1/Structs2 + Hibernate + Spring)
5、SpringMVC + Mybatis + Spring
6、SpringBoot开发

Spring官网
官网地址:https://spring.io/projects/spring-framework#overview
压缩包下载地址:https://repo.spring.io/release/org/springframework/spring/
源码地址:https://github.com/spring-projects/spring-framework

spring是一个开源框架
spring 是IOCAOP的容器框架。
IOC:Inversion of Control控制反转
AOP:面向切面编程
容器:包含并管理应用对象的生命周期

IOC

当在某个实现类中,需要当前对象的时候,可以通过set方式往里面注入具体的一个对象,而不需要每次去人为修改我们service中的代码了。

1
2
3
4
5
6
7
8
9
10
public class UserServiceImpl implements UserService {
// private UserDao userDao = new UserDaoImpl();
// private UserDao userDao = new UserDaoMysqlImpl();

private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
getUserDao()……
}
1
2
3
4
5
6
psvm{
UserServiceImpl userService = new UserServiceImpl();
UserDaoMysqlImpl userDaoMysql = new UserDaoMysqlImpl();
userService.setUserDao(userDaoMysql);
userService.getUser();
}

spring中也是用set进行实现的,只不过提供了一套更加完善的实现机制。设计框架的时候,要考虑扩展性

在做上面操作时,其实省略的是new的过程。new的过程是在测试类的时候来new的。但我们使用的时候,不可能每次写一个测试类,所以意味着,需要一个第三方来进行管理,来帮我们创建。【解耦】

基本概念

IOC(控制反转)与依赖注入(Dependency Injection,DI)同理,是一个通过依赖注入对象的过程。这个过程相对于普通创建对象是反向的。

IOC是一种设计思想。而DI是一个具体实现的方式。Spring只是把这两个应用到了自己的框架中,并不是首次提出的。  

想象之前的例子,开始是自己new的实现类,慢慢地把new的过程解耦出来,在Test类中,通过set方法serviceImpl类里面设置我所需要依赖的对象,而这个对象就是UserDao。
原来是自己创建自己所需要的对象,现在是由别人给你所需要的对象。
(实际生活中参考找女友和婚介公司)

  1. 谁控制谁:IOC容器来控制对象,然后把具体对象给到你。
  2. 控制什么:在实现过程中所需要的对象及需要依赖的对象。
  3. 什么是反转:以前自己主动创建new,现在由IOC容器创建后注入。由主动创建变为被动接收。
  4. 哪些方面被反转:依赖的对象。

总结

解耦

在面向对象设计的软件系统中,底层的实现都是由N个对象组成的。按道理说,是彼此耦合的。但一旦某个对象出问题,其他的对象也会受影响。因此需要尽量减少对象的耦合度。
为了解决上述问题,引入了IOC容器。通过中间的控制,把各个对象再进行一个组合。
在这里插入图片描述

比如上面,开始new的时候,严格绑定。但用了set注入,就不需要了。

生态

任何语言或框架想要立于不败之地,很重要的是生态。比如小米手机,家电……提供更完善服务。