一、Spring
1. 什么是Spring
Spring是一个开源框架,使模块之间低内聚高耦合。核心是IOC(控制反转)和AOP(面向切面编程)。
2.Spring的特点
- 低内聚高耦合
- 支持AOP编程:方便实现对程序进行权限拦截、运行监控等功能
- 支持声明式事务:只需要配置就可以完成对事务的管理,无需手动编程
- 方便程序测试:Spring支持Junit4,可以通过注解测试Spring程序
- 方便集成各种框架:如Structs、Hibernate、Mybatis等
- 降低JavaEE API的使用难度
3.IOC/DI
3.1 IOC
IOC将设计好的对象交给容器控制,而不是传统的在对象内部直接控制。要想更好理解IOC需要明确“谁控制谁,控制什么,为何反转,哪些方面反转了”。
- 谁控制谁,控制什么:传统Java SE程序设计,通过new创建对象,是程序主动去创建依赖的对象;而IOC专门有一个容器来控制对象的创建,所以说IOC容器控制对象,主要控制外部资源获取。
- 为何反转,哪些方面反转了:传统程序是由我们在对象中主动控制去直接获取依赖对象,是正转;而反转是由容器帮忙创建及注入依赖对象。因为容器帮我们查找及注入依赖对象对象只能被动接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转
3.2 DI
DI即依赖注入,由容器动态的将某个依赖注入到组件中。理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”。
谁依赖谁:应用程序依赖IOC容器
为什么需要依赖:应用程序需要IOC容器来提供对象需要的外部资源;
谁注入谁:IOC容器注入应用程序某个对象(即应用程序依赖的对象)
注入了什么:注入某个对象所需要的外部资源
3.3 IOC和DI的关系
它们是统一概念的不同角度描述,“依赖注入”准确描述了“被注入对象依赖IOC容器配置依赖对象”。
4.AOP
AOP是Spring框架面向切面的编程思想,AOP采用一种称为“横切”的技术,将设计多个业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置。
与OOP的区别:
OOP定义的是纵向关系。
AOP定义的是横向关系,AOP实现了无关代码块的重用,例如:用户登录模块。
4.1 AOP实现原理
- AOP底层将采用代理机制进行实现
- 接口+实现类:Spring采用jdk的动态代理Proxy
- 实现类:Spring采用cglib字节码增强
4.2 AOP核心概念
- target:目标类,需要被代理的类。例如:UserService
- Jointpoint:连接点,指可能被拦截到方法
- PointCut:切入点。例如:addUser()
- advice:通知/增强。增强代码,例如after,before
- Weaving:织入,把增强advice应用到目标对象target来创建新的代理对象Proxy的过程
- Proxy:代理类
- Aspect:切面,是切入点和通知advice的结合
5.Spring注解
5.1 为什么引入注解
传统的Spring使用xml文件对bean进行注入或者是配置AOP、事务,这么做有两个缺点。
(1)如果所有的内容都配置在xml文件中,那么xml文件会十分庞大,如果按需求将xml文件分开,那么xml文件又很多。导致配置文件的可读性与可维护性变得很低
(2)在开发中.java文件和.xml文件不断切换,十分麻烦,降低开发效率
所以,Spring引入注解,通过“@XXX”的方式,让注解与JavaBean紧密结合,大大减少配置文件的体积,增加了Java Bean的可读性与内聚性。
5.2 常用注解
1.@Autowired,自动装配,消除Java代码的getter/settter与bean属性中的property。默认按类型匹配的方式,在容器查找匹配的bean,当有且仅有一个匹配的Bean时,Spring将其注入到@Autowired标注的变量中。
2.@Qualifier,如果容器有一个以上匹配的bean,则可以通过@Qualifier注解限定Bean的名称
3.@Resource与@Autowired类似,
- @Resource后面没有任何内容,默认通过name属性匹配bean,找不到再按type去匹配
- 指定了name或type则根据指定的name或type去匹配
- 指定了name和type则根据指定的name和type去匹配,任何一个不匹配都会报错
区分@Resource与@Autowired
(1)@Resource默认按照byName方式进行bean匹配,@Autowired后面没有任何内容默认按照byType匹配
(2)@Resource是J2EE注解,@Autowired是Spring注解
4.@service用于标注业务层组件
5.@Controller用于标注控制层组件
6.@Repository用于比澳洲数据访问层组件,即DAO层
二、SpringMVC
1.什么是SpringMVC
SpringMVC是一种应用于Web开发的MVC框架。
2.SpringMVC工作原理
(源自https://www.cnblogs.com/xiaoxi/p/6164383.html)
(1)用户发送请求到前端控制器
(2)前端控制器收到请求调用HandlerMapping处理器映射器
(3)处理器映射器找到具体的处理器(根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给前端控制器
(4)前端控制器调用HandlerAdapter处理器适配器
(5)HandlerAdapter经过适配器调用具体的处理器(Controller,也叫后端控制器)
(6)Controller执行完后返回ModleAndView
(7)HandlerAdapter将controller执行结果ModelandView传给前端控制器
(8)前端控制器将ModelandView传给视图解析器
(9)视图解析器将解析结果View返回到前端控制器
(10)前端控制器根据View进行渲染视图
(11)前端控制器响应用户
三、SpringBoot
1.什么是SpringBoot
SpringBoot简化新Spring应用的初始搭建以及开发过程,整合了很多框架。可以快速启动一个Spring程序
2.SpringBoot优点
- 快速构建项目
- 对主流开发框架不需要配置集成
- 项目可以独立运行,不需要依赖servlet容器
- 提供运行时的应用监控
- 极大提高了开发和部署效率
- 与云计算天然集成