目录
Spring MVC
MVC是一种设计模式,软件被分为三层,模型层、视图层、控制层。模块层定义实体对象类型,视图层用户界面等,控制层负责业务逻辑。
AOP理解
AOP面向切面编程,是一种编程思想,是对OOP的一种补充,它可以对业务逻辑的各个部分进行隔离,降低耦合,提高代码的可重用性。它的底层是通过动态代理实现的。它的应用场景有事物、日志管理等。
IOC
控制反转,把对象与对象的依赖关系交给Spring维护,降低耦合度,DI依赖注入是IOC实现方法。注入方式有:Setter、接口、构造方法。
依赖注入
依赖注入是实现程序解耦的一种方式,属于IOC的一种类型。IOC(是指把创建对象,操作属性的事交给第三方框架来进行实现) 依赖注入的目标是在代码之外管理程序组建间的依赖关系
- 构造方法注入。
- Setter方式注入。
- 接口注入。
反射
反射就是在程序的运行期间,动态获得类的属性和方法,对于任何一个类,都能知道他的所有方法和属性。
SpringBoot注解
@SpringBootApplication 它是SpringBoot的核心注解,用于开启自动配置。
@EnableAutoConfiguration 自动配置注解。
@Conditional 是由Spring4.0版本引入的新特新,根据指定条件来决定进行Bean的实例化和装配。
Bean的创建周期
创建、初始化、调用、销毁
Spring的事务管理
两种事务管理 1.编程事物管理 2. 声明事务管理。
编程式事务可以将事务管理的范围控制的更为精确,声明式事务这种方式十分的方便,我们只需在方法上加上Transaction注解。
SpringBoot起步依赖
将开发的各种场景做成Starter依赖,springBoot就能自动扫描并启动相应配置。要遵循“约定大于配置”原则。
Mybatis$和#区别
$设置参数时,mybatis会创建普通的sql语句,然后在执行sql语句是将参数拼入sql。
#设置参数时,Mybatis会创建预编译的SQL语句,然后在执行SQL时Mybatis会为预编译SQL中的占位符赋值。
Spring MVC执行流程
1、 用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet 捕获(捕获)
2、 DispatcherServlet对请求 URL进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping获得该Handler配置的所有相关的对象(包括 Handler对象以及 Handler对象对应的拦截器),最后以 HandlerExecutionChain对象的形式返回;(查找 handler)
3、 DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。 提取Request 中的模型数据,填充 Handler 入参,开始执行 Handler(Controller), Handler执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象(执行 handler)
4、DispatcherServlet 根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver) (选择 ViewResolver)
5、通过 ViewResolver 结合 Model 和 View,来渲染视图,DispatcherServlet 将渲染结果返回给客户端。(渲染返回)
快速记忆技巧:
核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回
SpringBoot启动流程
调用run方法,创建SpringApplication实例化对象,再对这个对象调用自身的Run方法,获取监听器参数配置、打印banner信息、创建初始化容器、监听器消息推送。
@Autowired和@Resource
@Autowired是Spring提供的注解,只能按类型注入,按类型注入,可以按名称装配,结合@Qualifier注解一起使用。
@Resource是JDK题提供的注解,默认按名称注入,也支持按类型注入。
SpringBoot自动装配
加载Spring.factories中的autoConfiguration类,满足conditional注解的条件时,实例化bean
SpringBoot和Spring区别
1)SpringBoot本质上是Spring,完成了一些SpringBean的配置
2)SpringBoot使用“习惯优于配置”的理念让你项目快速运行。
3)SpringBoot本身不提供Spring的核心功能,而是作为Spring的脚手架框架。
优点:1)快速构建项目。
2)项目可独立运行。
3)可以对主流开发框架无配置集成。