当前位置:   article > 正文

SSM+SpringBoot笔记

ssm+springboot

前言

仅记录学习笔记,如有错误欢迎指正。
最近打算重新整理一下笔记,好好回顾一下之前学的东西。争取在6月份之前整理完毕,加油加油。

一、mybatic的一对一和一对多

  • 一对一是用association
  • 一对多是connection
  • xml里面的全限定类名对应dao层的类名 id对应每个方法的名称

Mybatis工作原理?

通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory

SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句

完成数据库的CRUD操作和事务提交,关闭SqlSession。

#{}和${}的区别

#{}是占位符,预编译处理;${}是拼接符,字符串替换,没有预编译处理。

Mybatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用PreparedStatement的set方法来赋值。

Mybatis在处理时 , 是 原 值 传 入 , 就 是 把 {}时,是原值传入,就是把时,是原值传入,就是把{}替换成变量的值,相当于JDBC中的Statement编译

变量替换后,#{} 对应的变量自动加上单引号 ‘’;变量替换后,${} 对应的变量不会加上单引号 ‘’

#{} 可以有效的防止SQL注入,提高系统安全性;${} 不能防止SQL 注入

Mybatis的一级、二级缓存:

  1. 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。

  2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置

二、Spring是什么?

Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。

  1. spring属于低侵入式设计,代码的污染极低;
  2. spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;
  3. Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。
  4. spring对于主流的应用框架提供了集成支持

spring实例化bean的过程:

实例化:
  1. 实例化一个Bean,也就是我们通常说的new
  2. 2.按照Spring上下文对实例化的Bean进行配置,也就是IOC注入( 先依赖注入
处理Aware接口:
  1. 如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的id
  2. 如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean)
  3. 如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文,该方式同样可以实现步骤4,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法。
BeanPostProcessor:

在这里插入图片描述

  1. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用 作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用After方法,也可用于内存或缓存技术
InitializingBean与init-method:
  1. 如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法

  2. 如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization(Object obj, String s)方法(注意:以上工作完成以后就可以用这个Bean了,那这个Bean是一个single的,所以一般情况下我们调用同一个ID的Bean会是在内容地址相同的实例)

    当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法

  3. 最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法

Spring中七种事务传播行为

事务的传播行为,默认值为 Propagation.REQUIRED。可以手动指定其他的事务传播行为,如下:(不会存在循环事务的可能)

  • Propagation.REQUIRED

如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务。

  • Propagation.SUPPORTS

如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式继续运行。

  • Propagation.MANDATORY

如果当前存在事务,则加入该事务;如果当前不存在事务,则抛出异常。

  • Propagation.REQUIRES_NEW

重新创建一个新的事务,如果当前存在事务,延缓当前的事务。

  • Propagation.NOT_SUPPORTED

以非事务的方式运行,如果当前存在事务,暂停当前的事务。

  • Propagation.NEVER

以非事务的方式运行,如果当前存在事务,则抛出异常。

  • Propagation.NESTED

如果没有,就新建一个事务;如果有,就在当前事务中嵌套其他事务。

Spring的循环依赖
构造器注入循环依赖

在这里插入图片描述
构造器注入构成的循环依赖,此种循环依赖方式是无法解决的,只能抛出BeanCurrentlyInCreationException异常表示循环依赖。这也是构造器注入的最大劣势

根本原因:Spring解决循环依赖依靠的是Bean的“中间态”这个概念,而这个中间态指的是已经实例化,但还没初始化的状态。而构造器是完成实例化的东西,所以构造器的循环依赖无法解决~~~

在这里插入图片描述

解决循环依赖的过程:

在这里插入图片描述

为什么只用二级缓存不可以呢?

因为在二级缓存里面可能是执行完BeanPostProcess生成的代理对象,多线程情况下每个对象都不一样,就无法确定取得的对象。

三、什么是SpringMVC

SpringMVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型。MVC: Model View Controller 模型-视图-控制器

视图:展示给用户的视图;
模型:表示数据和业务处理规则。模型返回的数据是独立的,这样的一个模式能够为多个视图提供数据,这样一来模型的代码只需要写一次便能够被多个视图重用,减少了代码的重复性;
控制器:接受用户的输入并调用相应的模型和视图来完成用户的需求。

SpringMVC的工作流程?

  1. 用户发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet收到请求调用HandlerMapping处理器映射器;
  3. 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
  4. DispatcherServlet调用HandlerAdapter处理器适配器;
  5. HandlerAdapter经过适配调用具体的处理器(Controller);
  6. Controller执行完成返回ModelAndView
  7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet;
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器;
  9. ViewReslover解析后返回具体View
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中);
  11. DispatcherServlet响应用户。

四、SpringBoot:

springboot 的核心功能:
1.独立运行的spring项目:可以以jar/war包的形式独立运行,在cmd下打 Java - jar xxx.jar
2.内置的servlet容器:不依赖于外部的tomcat,自带服务器,快速运行;
3.提供starter简化maven配置:简化maven配置,大大减少配置,“约定优于配置”
4.自动装配:springboot通过@EnableAutoConfiguration吧@configuration和@bean的方法加载到spring容器里。

自动装配原理:(约定优于配置,默认扫描以默认命名的jar包)

@SpringBootApplication 里面有 @ EnableAutoConfiguration(开启自动配置):
功能由@Import提供,其导入的AutoConfigurationImportSelector的selectImports()方法通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包。spring-boot-autoconfigure-x.x.x.x.jar里就有一个这样的spring.factories文件

自动配置生效:

自动配置类都是在某些条件之下才会生效的,这些条件的限制在Spring Boot中以注解的形式体现,常见的条件注解有如下几项:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/476950
推荐阅读
相关标签
  

闽ICP备14008679号