欢迎光临散文网 会员登陆 & 注册

学习记录之Spring-MyBatis框架总结

2022-08-24 00:40 作者:星月袭空  | 我要投稿

SpringBoot脚手架分析与设计

1.1:SpringBoot是什么?

    Spring Boot 是一个全新的Java软件开发框架,很多人把他理解为一个脚手架,它基于快速构建理念,通过约定大于配置,开箱即用的方式,来简化Spring项目的初始搭建以及开发工程,提高开发效率

1.2:Spring Boot核心优势是什么?

    SpringBoot为我们提供了起步依赖(Starter Dependency)、自动配置(Auto Configuration)、健康检查(Actator)、嵌入式服务(Tomcat,jeyyt)等核心特性,基于这些特性和优势可以更好的服务我们的开发过程。可以更好的简化项目构建,代码编写,项目配置、项目部署等,可以说SpringBoot技术是大势所趋。

1.3:SpringBoot 核心配置文件的类型?

    SpringBoot提供了后缀为properties,yml,factories等类型的配置文件。

1.4如何学习SpringBoot呢?

    先知其然(要清楚该功能要解决什么问题),然后动手实践,逐步追本溯源,知其所以然

1.5SpringBoot的启动过程是怎样的?

    在SpringBoot启动时,其大概过程如图所示

其基本启动过程描述如下:

     基于配置加载类(通过ClassLoader将指定为位置的类读取到内存--底层通过现场调用IO从磁盘读取到内存)。

    对类进行分析(创建字节码对象--Class类型,通过反射获取配置信息)。

    对于指定配置(例如有spring特定注解描述)的对象存储其配置信息(借助BeanDefinition对象中存储

    基于BeanDefinition对象中class的配置构建类的实例(Bean对象),并进行bean对象的管理(可能会存到bean池)。

Spring框架分析与设计

2.1:Spring是一个什么框架

    Spring是一个资源整合框架,其核心是资源整合,然后以一种更加科学的方式对外提供服务,例如提高对象的应用效率,降低系统开销,提高代码的可维护性等等。其官方网址为spring.io

2.2:Spring框架中有哪些重要的模块

    Spring IOC;Spring AOP;Spring WEB; Spring Data;

2.3: Spring框架是如何构建对象?

    Spring框架中所有Bean对象都是通过BeanFactory接口类型的工厂对象构建的,此工程底层会基于Java中的反射技术进行实现,首先获取类的字节码对象,然后基于字节码对象获取构造方法,最后基于构造方法对象构建类的实例对象;

2.4:如何理解Spring中IOC设计

    IOC是一种设计思想, 我们称之为控制反转,本质上讲解的是对象控制权问题。基于这种设计可以让初学者将对象的控制权转交给第三方,由第三方专业团队管理和应用对象。这样可以更好的避免对象非正确的使用方式,进而更好改善对象在内存中的科学应用。这个IOC设计从生活角度就可以理解为由股票操盘手负责帮你进行资金管理,(可以让初级程序员坐享其成,因为初级程序员写的程序规范性不够,资源应用凡是不够科学)

2.5:为什么要将对象交给Spring管理

    Spring为我们的对象赋予了很多个更加科学的特性,例如延迟加载,作用域,生命周期方法(@PostConstruct、@PreDestory),以及运行时的自动依赖注入DI(降低耦合,提高程序的可维护性)机制等,基于这些特性可以更好的提高对象的应用性能以及程序的可扩展性。

DI(依赖注入-兵马未动粮草先行),依赖注入之前首先需要依赖查找(DL)--按类型,名字

2.6:Spring框架中的Bean有什么特性

    Spring框架为了更加科学的管理和应用Bean对象,为其设计相关特性,例如:懒加载(@Lazy)、作用域(@Scope)以及生命周期方法

2.7:Spring中 用于定义Bean对象什么周期方法的注解?

    @PostConstruct、@PreDestory

2.8:Spring中用于实现依赖注入的注解

    @Autowire(描述属性,构造方法,set方法,其他),默认优先按照类型查找

    @Resource(描述属性,构造方法,set方法),默认优先按照名称查找

2.9: @Autowire注解有什么作用

    @Autowire由Spring框架等一,用于描述类中属性或相关方法(例如构造方法)。Spring框架在项目运行时假如发现由他管理Bean对象中由使用@Autowire注解描述的属性或方法。可以按照指定规则为属性赋值(DI),去基本规则是:首先要检测容器中是否与属性或方法参数类型相匹配的对象,假如有并且只有一个则直接注入。其次假如检测到有到有多个,还会按照@Autowire描述的属性或方法参数名称查找是否有名字匹配的对象,有则直接注入,没有则抛出异常,最后假如我们没有明确要求,必须要注入类型为指定类型,名字为指定名称的对象还可以使用@Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowire注解使用)

2.10:描述下@Qualifier注解的作用

    @Qualifier注解用于描述属性或方法参数,当有多个相同类型的bean却只需要自动装配时,将@Qualifier注解和@Autowire注解组合使用以消除这种混淆,指定需要装配的确切的bean

2.11:@Component和@Configuration注解的异同点

    @Component注解同错描述一般bean对象,比如具备一定通用性的对象。@Configuration注解同错用于描述Spring工程中的配置类,是哦一个增强版的@Component注解, 在配置类中定义一些有@Bean注解描述的方法,然后通过这些方法对一些自己定义或第三方的bean进行对象的创建和初始化。当我们使用@Configuration注解描述一个配置类时,Spring框架底层会为这个@Configuration注解描述的配置类创建一个CGLIB对象,然后有代理对象调用@Bean注解描述的方法,同时底层会检测方法返回的Bean是否已创建,假如已创建则不再创建。使用@Component注解描述类时,系统底层并不会为此类创建代理对象,只是创建当前类的对象,然后调用@Bean注解描述的方法,创建和初始化Bean,方法每调用一次就会创建一个新的对象;

2.12:说说你对Spring中JdbcTemplate的理解

    JdbcTemplate是Spring中提供一个封装了JDBC操作的模板类,此类基于模板方法模式定义了很多JDBC模板方法,简化了JDBC的一些基本操作步骤,可以更好提高我们的开发效率,此类在运行时需要由Spring注入一个DataSource对象,然后基于DataSource可以获取一个连接池,从池中获取访问数据库的链接

2.13:如何理解Spring中的MVC设计?

    MVC是一种分层架构设计思想,是Mode,View,Controller的缩写,是为了将复杂问题简化而提出一种分而治之的设计套路,基于这种套路来提高代码的可维护和可扩展性。SpringMVC仅仅是Spring框架中WEB模块基于MVC设计思想的落地实现,简化了web请求和响应的处理过程

2.14SpringMVC中异常是如何处理的?

    Spring工程中web模块可以基于@RestControllerAdvice注解来哦定义全局异常处理类,然后借助全局异常处理类规范进行异常处理,大概过程如下

2.15:说几个Spring中用于定于组件的注解

    @Component

    @Service

    @Controller

    @Repository

    @Configuration

    @Bean

2.16: 说几个SpringMVC中描述方法的注解

    @RequsetMapping

    @PostMapping

    @GetMapping

    @DeleteMapping

    @PutMapping

    @PathMapping

    @ResponseBody

2.17:说几个SpringMVC中描述方法参数的注解

    @RequestParam

    @PathVariable

    @RequestBody

    @RequestPart(描述文件上传的方法参数)

2.18:说说SpringMVC中的拦截器

    Spring框架中定义的拦截器属于SpringMVC模块执行链中的一个对象,其类型为HandlerInterceptor,基于这个类型的拦截其可以对后端@Controller注解描述的对象进行请求和响应的拦截。用于进行一些预处理操作

2.19:@ResponseBody注解的作用

    @ResponseBody用于描述类或者方法,用于告诉底层可以将方法的返回之转换为Jsom格式的字符串,然后再写到响应体响应到客户端。假如类中所有方法都需要使用@ResponseBody注解进行标记,则可以直接使用@RestController对类进行描述;

2.20:如何理解Spring中AOP设计

    AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,他是面向对象编程(OOP)的一种补充和完善。实际项目中我们通常将面向对象理解为一个静态过程(例如一个系统由多少个模块,一个模块由哪些对象,对象有哪些属性),面向切面理解为一个动态过程(在对象运行时动态织入一些扩展功能或控制对象执行)。如图所示:

2.21:SpringBoot工程中如何定义切面?

    基于@Aspect注解进行描述,并交给Spring管理(使用@Aspect注解描述的类,再使用@Component注解进行描述)

2.22:SpringBoot公测中的切面内部如何东一切入点?

    基于@Pointcut注解并借助相关表达式进行实现(@annotation,bean,execution,within,...)

2.23:SpringBoot工程中的切面内部可以定义那些通知类型?

    @Around(优先级最高)

    @Before(优先级仅次于around)

    @After(无论执行逻辑成功与否最后都会执行)

    @AfterReturning(业务逻辑正确结束后执行)

    @AfterThrowing(业务逻辑异常结束后执行)

2.24:SpringAOP实现原理是怎样的?

    Spring中AOP设计, 谁在系统启动时为目标类型创建子类或兄弟类型对象,这样的对象我们通常称之为动态代理对象,然后通过动态代理对象为目标对象实现功能的扩展,入土所示:


其中目标类型(XxxServiceImpl)创建器代理对象方式有两种

    第一:JDK代理,借助JDK官方API为目标对象类型创建其兄弟类型对象,但是目标对象类型需要实现相应接口

    第二CGLB代理,借助CGLB库为目标对象类型创建其子类类型对象,但是目标对象类型不能使用final修饰;

2.25SpringAOP切面有哪些关键元素?

    切入点(pointcut):定义了切入扩展业务逻辑的位置(哪些方法运行时切入扩展业务),一般会通过表达式进行相关定义,一个切面中可以定义多个切入点;

    通知(Advice):内部封装扩展业务逻辑的具体方法对象,一个切面中可以有多个通知(在切面的某个特定位置上执行的动作:扩展功能)

    连接点(joinpoint):程序执行过程中,封装了某个正在执行的目标方法信息的对象,可以通过此对象获取具体的目标方法信息,甚至区调用目标方法,连接点与切入点定义如图:

我们可以简单的将机场的一个安检口理解为连接点,多个安检口为切入点,安全检查过程看成是通知,总之,概念很晦涩难懂,多做例子,做完就会清晰。

2.26:SpringAOP的应用场景有哪些?

    日志记录

    事务控制

    权限控制

    缓存应用

    异步操作

    限流熔断

2.27:SpringAOP中描述通知方法的注解?

    @Around

    @Before

    @After

    @AfterThrowing

    @AfterReturning

2.28:说说Spring框架中支持的事务方式?

    Spring框架支持的事务方式主要由两种:

    1.编程式事务管理:这意味着你通过编程的方式管理事务,给你带来极大的灵活性,但是男维护

    2.声明式事务管理:这意味着你可以将业务戴拿和事务管理分离,你只需用注解和XML配置来管理事务

2.29:Spring中声明式事务的实现方式?

    在类或方法上添加@Transaction注解。(注解内部的属性结合业务进行自定义即可)

2.30:Spring中定义了那些事务隔离级别?

    多个事务并发执行可能会出现什么?(脏读、不可重复读、幻读)

    1 DEFAULT

    2 READ_UNCOMMITTED(读未提交)

    3 READ_COMMITTED(读提交)

    4 REPEATABLE_READ(可重复读)

    5 SERIALIZABLE(可串行化,一般解决幻读问题)

2.31:SpringBoot中如何启动异步任务

    1.在启动类或配置类上添加@EnableAsync注解

    2.在执行异步方法的类上添加@Async注解

2.32:Spring中常见那些设计模式有那些?

    1.建造模式:BeanDefinitionBuilder

    2.简单工厂模式:BeanFactory

    3.工厂方法模式:ProxyFactoryBean

    4.单例模式:单例Bean对象

    5.代理模式:AOP Proxy

    6.策略模式:AOP代理策略,SimpleInstantiationStrategy

    7.适配器模式:AdvisorAdapter

    8.模板方法模式:JdbcTemplate

    9.责任链模式:HandlerInterceptor

    10:.观察者模式:ApplicationListener

3Spring Security安全框架分析与设计

3.1:SpringSecurity是什么?

    SpringSecurity是Spring生态中用于完成认证、授权、鉴权的功能的一个安全框架,类似的这样框架在市场上还有Apache Shiro(轻量级,配置简单),这个框架前期也应用比较广泛,但是没有SpringSecurity功能强大

3.2:SpringSecurity框架中有按需核心API对象?

    XxxFilter(判断用户是否已经认证)

    AuthenticationManger(服务完成用户身份认证的对象)

    UserDetailService(负责获取用户详细的对象)

    BCryptPasswordEncoder(消息摘要+随机盐)

3.3:SpringSecurity的配置类中你配置过什么

    那些请求不需要认证(匿名即可访问--游客)

    那些需求必须认证

    认证成功或失败返回什么

    跨域攻击

    ......

3.4:SpringSecurity框架中你用过什么注解?

    @PreAuthorize(“hasAutorize(‘sys:log:delete’)”)

3.5:SpringSecurity用户登录状态你存储到了哪里?

    方案1:存储到对象Httpsession中

    方案2:可以存储到redis

    方案3:可以存储到jwt中

3.6:JWT是什么以及构成?

    是Json Web Token的缩写,一种令牌格式,通常用于在网络见传递用户信息,它由Header、Payload、签名部分构成,其中Header和payload部分会使用Base64算法进行编码,然后为了保证令牌不会被篡改,可以对令牌进行签名。

3.7:Oauth2是什么?

    Oauth是一个规范化的认证协议,定义了客户端与服务端交互时认证规范,例如,如何实现三方认证(类似登录时使用微信登录、QQ登录)通常我们在使用Oauth2时要明确规定:

    1.客户端携带什么信息区认证,区哪里认证?(不是任何请求都可以进行认证)

    2.服务端有谁来认证?(具体的认证管理器是谁)

    3.认证通过颁发什么令牌?(普通令牌--UUID,JWT)

4MyBatis框架分析与设计

4.1:MyBatis 是什么?

    MyBatis 是一个优秀的Java持久层(数据访问层)框架,有apache的ibatis演变而来,他通过XML或注解凡是将对象与SQL关联起来,实现了对JDBC操作的封装,简化了JDBC代码手动设置参数和手动进行结果集映射的过程


4.2:MyBatis 常用官方网址/

    http://mybatis.org/mybatis-3(mabayis基础)

    http://mybatis.org/spring(传统spring工程系mybatis的整合)

    http://mybatis.org/spring/boot.html(springboot工程下mybatis的整合)

4.3:MyBatis 框架有什么优势

    可以更好的实现JAVA代码与SQL语句的分离,提高可维护性

    通过动态SQL可以更好的适配灵活的需求变更。(最大优势-if,choose,for each ,trim)

    通过SQL映射简化了JDBC代码中SQL参数及其结果集处理(很多框架都有)

    合理的架构设计,提高了系统的稳定性,访问性能,可扩展性

4.4:MyBatis 有什么劣势

    SQL语句编写的工作量相对较大、(相对于hibernate框架-HQL)

    SQL语句依赖于数据库,移植性相对较差

4.5:MyBatis 的应用架构是怎样的?

4.6:SpringBoot工程下MyBatis框架的整合?

    1.确定已经配置好数据源(DataSource)

    2.添加依赖(mybatis-spring-boot-starter)

    3.基础配置(可选,基于业务实践有选择性的进行配置)

    4.创建数据访问接口及方法并定义SQL映射

    5.定义单元测试类,对具体业务方法进行单元测试

4.7: MyBatis中核心API有哪些?

    1.SqlSessionFactory(会话工厂,负责创建具体的会话对象-SqlSession)

    2.SqlSession(会话接口对象)

    3.DefaultSqlSession(此对象为会话接口的具体实现)

    4.SqlSessionTemplate(线程安全SqlSession对象,底层基于模板方法模式进行了封装)

学习记录之Spring-MyBatis框架总结的评论 (共 条)

分享到微博请遵守国家法律