1、spring 轻量化的Java开发框架 但是配置过于繁琐,springmvc是spring一个很重要的模块,主要赋予 Spring 快速构建 MVC 架构的 Web 程序的能力。Spring Boot 旨在简化 Spring 开发(减少配置文件,开箱即用!)。提供提供嵌入式 HTTP 服务器,如 Tomcat 和 Jetty,可以轻松地开发和测试 web应用程序 提供了多种插件,可以使用内置工具(如 Maven 和 Gradle)开发和测试 Spring Boot应用程序。
2、spring ioc
ioc 控制反转,控制:指的是对象创建(实例化、管理)的权力
反转:控制权交给外部环境(Spring 框架、IoC 容器)
IoC 容器是 Spring 用来实现 IoC 的载体 ioC 容器实际上就是个map,Map 中存放的是各种对象
- 3、
- spring中将一个类声明成bean的注解
注入Bean @ Autowired
可以通过 @Qualifier
注解来显式指定名称
bean的线程安全问题 Bean是单例的话 如果这个 bean 是有状态的话,那就存在线程安全问题(有状态 Bean 是指包含可变的成员变量的对象)。
bean的生命周期
4、aop 把横切关注点(日志、权限、事务管理)分离出来,需要实现这个的地方进行添加增强 更有利于程序的可重用性 运行时增强、基于代理
如何进行aop切面编程呢 ? 先创建一个切面 ,写入需要执行的逻辑 即通知 和切入点,aop碰到目标对象有切入点进行拦截,然后由代理执行通知内容
spring循环依赖
5、声明式事务 @Transactional
注解默认回滚策略是只有在遇到RuntimeException
(运行时异常) 或者 Error
时才会回滚事务,而不会回滚 Checked Exception
(受检查异常)。受检查异常:必须在编译时处理或声明,代表外部环境错误或预期外情况。编译器会检查这类异常,确保它们被正确处理。
事务 原子性 一致性 隔离性 持久性
原子性 要么成功 要么失败 undo log(遇到异常进行回滚
隔离性 事务之间是隔离的 靠锁
持久性 一旦提交事务 数据是永久记录的 redo log来持久化数据
一致性 事务的目的
事务传播行为和隔离级别
- 6、spring中 的设计模式 工厂模式、单例模式、代理模式
7、springboot常见面试题
√spring-boot-starter-parent 已经有很多默认的依赖
自动装配 spring.factories定义了100+个入口的配置类。比如我们经常使用的redis、kafka等等这样常见的中间件都预置了配置类 starter就是做了一层封装,把相关要用到的jar都给包起来了,并且也写好了对应的版本。这我们使用的时候就不需要引入一堆jar包且管理版本类似的问题了。
√ 起步依赖 这个起步依赖会自动引入一组相关的依赖,包括Spring MVC、Jackson(用于JSON处理)和内嵌的Tomcat服务器等
内置tomcat 切换成jetty
再添加即可
√自动装配原理 自动装配可以简单理解为:通过注解或者一些简单的配置就能在 Spring Boot 的帮助下实现某块功能。 自动装配的核心功能通过@EnableAutoConfiguration
注解和AutoConfigurationImportSelector
类实现。selectImports
方法从META-INF/spring.factories
中加载所有可用的自动配置类,并根据@Conditional
注解进行筛选,只有所有条件都满足时,自动配置类才会生效并被加载到IoC容器中,从而实现自动配置功能会生效
√ 自动配置 包扫描 其他配置类导入
√常用配置文件 application.properties或者 application.yml
√参数校验 对值进行添加 @Null @Email @NotEmpty 验证请求体 @Valid @Validated
√全局异常处理 推荐使用注解的方式统一异常处理,具体会使用到 @ControllerAdvice
+ @ExceptionHandler
这两个注解 。
ControllerAdvice(basePackages = "")
:该注解将该类声明为一个全局异常处理器,只会捕获和处理指定包中的控制器抛出的异常。
@ExceptionHandler({CommonException.class})
:这个注解方法会捕获CommonException
类型和其他类型的异常。
√定时任务 方法@scheduled 启动类上 @EnableScheduling
8、mybatis框架
JDBC操作过于繁琐 连接数据库 业务逻辑和数据库操作混在一起 设置参数获取结果集合都需要手动设置
mybatis 持久层框架 内部封装了JDBC 只需要关注sql语句,不用管创建连接、加载驱动这些烦心事 通过xml或则和注解两种方式配置sql语句
mybatis-config.xml中去设置数据库连接 加载sql文件 resources中是使用/建包的 而不是.
需要有一个usermapper 去写sql语句对应的mapper方法
同层次目录下去写usermapper.xml文件 去写sql语句,当然也可以在mapper文件用注解的方式去写sql语句 但是注解开发适合于简单的sql语句,复杂的还是选择用xml文件的形式
接下来就是去写测试文件,使用 mapper代理的方式
xml中的sql语句
指定对应mapper的位置
插入语句 id是这个sql的唯一标识 usergeneratedkeys是可以获取到keyproperty主键的值
更新语句 <set>是动态sql的标签
删除语句 <foreach>是删除语句的动态sql标签 其中ids是遍历的数组集合 id是得到的元素 用,分隔
查询语句 <where>标签是查询语句对应的动态标签 <if>是做条件的拼接
select * from user where id=#{id}
参数传递的时候用#{} 等同于JDBC里边的? 自动转义 可以防止sql注入
${} 参数传递的时候直接拼接 不做处理 动态传递 表名和列名不固定的情况下使用