SSM

IoC

是一种思想,它将创建对象交给IOC容器管理,DI依赖注入是实现IOC的灵魂,DI注入(交给容器赋值)一般又分为

  • 构造方法注入:需要每次去改变原有的代码,会破坏程序的完整性
  • Setter 注入:有set方法的前提下,交给由容器来注入,又分为xml和注解两种方式实现
    1、xml配置(name-value注入,name-ref引用注入,name-list-value注入,name-array-value注入,name-map-entry注入等),每个bean相当于IOC容器new一个对象
    2、注解(@Configuration,@Bean)
AOP

将一些非核心的业务逻辑抽离,实现核心业务和非核心业务的解耦(事务的管理、日志)

核心概念:
引用一个切面aspect ref=“可自定义一个切面”

  • 切入点pointcut 具体要切入哪个类的哪些方法(execution(要执行的位置))
  • before method="before"把切面里的before方法切入切点之前

它的底层是基于JDK动态代理或者cglib字节码操作技术
静态代理
代理类和本体类实现相同的接口,代理类又要在实体类的基础上进行增强操作(一个代理类new的是一个具体的实体类)
动态代理
要达到多个实体类使用同一个代理类
代理类 implements InvocationHandler(JDK提供的用来抽象代理类的行为)里面有一个invoke()方法,使用invoke里面的method方法来反射调用实体类的方法

JDK和cglib区别

JDK:实现一个InvocationHandler接口里面有一个invoke()方法,利用反射原理实现
cglib:目标类没有实现接口的话,定义CglibProxy类,实现MethodInterceptor接口,实现intercept方法

bean 的作用域有哪些?
  • singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
  • prototype : 每次请求都会创建一个新的 bean 实例。
  • request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。(仅适用于 WebApplicationContext 环境。)
  • session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。(仅适用于 WebApplicationContext 环境。)
  • application 作用域:全局的 Web 作用域,类似于 Servlet 中的 Application。
bean的生命周期

在这里插入图片描述

spring的常用注解
  • @Repository : 对应持久层即 Dao 层,主要用与数据库相关操作。
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao层。
  • @Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
  • @ComponentScan(value=com.atguigu):atguigu下的@Repository@Service@Controller 全部加到容器中
  • @Configuration:声明一个类作为配置类,代替xml文件
  • @Component 在类定义之前添加@Component注解,他会被spring容器识别,并转为bean
  • @Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签
  • @Autowired :自动装配(把容器中被标记成@Bean的方法拿过来用,名字默认类名首字母小写)
  • autowired和@resource的区别:
事务
管理事务的方式有几种?

编程式事务,在代码中硬编码。(不推荐使用)

声明式事务,在配置文件中配置(包含基于XML的声明式事务、基于注解的声明式事务)

Spring 事务中的隔离级别有哪几种?(五种)

DEFAULT:使用数据库默认隔离级别(mysql默认可重复读,Oracle默认读已提交)

读未提交

读已提交

可重复读

串行化

Spring 事务中哪几种事务传播行为?(7种)
  • PROPAGATION_REQUIRED:支持当前事务;如果当前没有事务,则创建一个新的事务(最常见)

  • PROPAGATION_MANDATORY(强制的):支持当前事务,如果当前没有事务,就抛出异常

  • PROPAGATION_REQUIRES_NEW(新建一个): 创建一个新的事务,如果当前存在事务,则把当前事务挂起

  • PROPAGATION_NOT_SUPPORTED(不支持): 以非事务方式运行,如果当前存在事务,则把当前事务挂起

  • PROPAGATION_NEVER(绝不支持):以非事务方式运行,如果当前存在事务,则抛出异常

Spring MVC
工作原理

SpringMVC运行原理

流程说明(重要):
  1. 客户端(浏览器)发送请求,直接请求到 DispatcherServlet
  2. DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler
  3. 解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。
  4. HandlerAdapter 会根据 Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。
  5. 处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View
  6. ViewResolver 会根据逻辑 View 查找实际的 View
  7. DispaterServlet 把返回的 Model 传给 View(视图渲染)。
  8. View 返回给请求者(浏览器)
有哪些组件

Spring MVC提供了一种轻度耦合的方式来开发web应用;它是Spring的一个模块,是一个web框架;通过DispatcherServlet, ModelAndView 和 View Resolver,开发web应用变得很容易;解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。

常用注解

@Controller:表明是一个控制层

@RequestMapping:用于处理请求地址映射,可以作用于类和方法上

@ResponseBody:作用于方法上,可以将整个返回结果以某种格式返回,如json或xml格式

@RestController:相当于是@Controller和@ResponseBody的组合

@PathVariable 用来接收路径参数,如/news/001,可接收001作为参数,此注解放置在参数前。

@RequestBody和@ResponseBody的区别

@Autowire和Resource区别

在这里插入图片描述

Mybatis
#{}和${}的区别

$ {}:直接替换成值可能导致sql注入 name = ‘Jack’ or 1=1,相当于加入一个条件
#{}:解析为一个JDBC预编译语句的参数标记(#{name}解析为 name = ? )则name = '‘Jack’ or 1=1’行不通,只能算是加入了一个值
除了表名、group by后面用到${}(因为#{}默认加载单引号,而表名要加``),一般使用#{}

缓存机制(适用读多写少)

一级缓存:默认开启,作用域在同一个SqlSession下,如果中间有更新操作,将清空一级缓存
二级缓存:
当前会话关闭,一级缓存会放入二级缓存中
先开启缓存(cacheEnabled),在整个mapper里面生效

<cache
    eviction="FIFO"//先进先出缓存,默认清除策略是LRU(清除掉最近不常被使用的数据),还有软引用、弱引用
    flushInterval="60000"//每隔60秒刷新
    size="512"//最多存储512个引用
    readOnly="true"
    />

顺序是先走二级缓存再走一级缓存最后走数据库

在mapper中自定义缓存(Ehcache)
在cache后加type选择第三方缓存覆盖实现更多功能

动态sql

修改一个对象时,部分字段为空时不修改,怎么编写sql语句(动态sql)

分页

直接用limit
使用分页插件PageHelper(start:开启页、limit:每页行数)

spring boot流程和优点

在这里插入图片描述
是一个基于spring快速配置的一套脚手架配置文件少了,内嵌了servlet容器,可以将项目打包通过.jar运行,快速整合第三方框架,自用默认配置减少开发工作量

spring boot注解

在这里插入图片描述

在其中比较重要的有三个注解,分别是:

1)@SpringBootConfiguration // 继承了Configuration,表示当前是注解类

2)@EnableAutoConfiguration // 开启springboot的注解功能,springboot的四大神器之一,其借助@import的帮助

3)@ComponentScan(excludeFilters = { // 扫描路径设置(具体使用待确认)

cloud组件、优缺点

1.eureka注册中心(Nacos)
2.Ribbon负载均衡
3.Hystrix熔断器
4.Feign声明式调用
5.Gateway网关
6.SpringcloudConfig配置中心(Nacos)
SpringcloudBus消息总线(Nacos)

优点:

服务拆分粒度更细,有利于资源重复利用,有利于提高开发效率
微服务架构采用去中心化思想,服务之间采用Restful等轻量级通讯,比ESB更轻量
适于互联网时代,产品迭代周期更短

缺点:

微服务和分布式系统,开发成本高,不利于维护

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值