框架
工具类严格意义上来说,也可以称为简陋的框架。
框架是一些类和接口的集合,是开发中的半成品。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 是IOC和AOP的容器框架。
IOC:Inversion of Control控制反转
AOP:面向切面编程
容器:包含并管理应用对象的生命周期
IOC
当在某个实现类中,需要当前对象的时候,可以通过set方式往里面注入具体的一个对象,而不需要每次去人为修改我们service中的代码了。
1 | public class UserServiceImpl implements UserService { |
1 | psvm{ |
spring中也是用set进行实现的,只不过提供了一套更加完善的实现机制。设计框架的时候,要考虑扩展性。
在做上面操作时,其实省略的是new的过程。new的过程是在测试类的时候来new的。但我们使用的时候,不可能每次写一个测试类,所以意味着,需要一个第三方来进行管理,来帮我们创建。【解耦】
基本概念
IOC(控制反转)与依赖注入(Dependency Injection,DI)同理,是一个通过依赖注入对象的过程。这个过程相对于普通创建对象是反向的。
IOC是一种设计思想。而DI是一个具体实现的方式。Spring只是把这两个应用到了自己的框架中,并不是首次提出的。
想象之前的例子,开始是自己new的实现类,慢慢地把new的过程解耦出来,在Test类中,通过set方法
往serviceImpl类
里面设置我所需要依赖的对象,而这个对象就是UserDao。
原来是自己创建自己所需要的对象,现在是由别人给你所需要的对象。
(实际生活中参考找女友和婚介公司)
- 谁控制谁:IOC容器来控制对象,然后把具体对象给到你。
- 控制什么:在实现过程中所需要的对象及需要依赖的对象。
- 什么是反转:以前自己主动创建new,现在由IOC容器创建后注入。由主动创建变为被动接收。
- 哪些方面被反转:依赖的对象。
总结
解耦
在面向对象设计的软件系统中,底层的实现都是由N个对象组成的。按道理说,是彼此耦合的。但一旦某个对象出问题,其他的对象也会受影响。因此需要尽量减少对象的耦合度。
为了解决上述问题,引入了IOC容器。通过中间的控制,把各个对象再进行一个组合。
比如上面,开始new的时候,严格绑定。但用了set注入,就不需要了。
生态
任何语言或框架想要立于不败之地,很重要的是生态。比如小米手机,家电……提供更完善服务。