java基础复习第三阶段

1 什么是 Spring Boot?

Spring Boot 是 Spring 开源组织下的子项目,Spring boot是一个脚手架(而非框架),构建于Spring框架基础之上。主要是简化了使用 Spring 的难度,简化了繁琐的配置,提供了各种启动器,开发者能快速上手。

2 Spring Boot 有哪些优点?

1.自动配置
Spring boot提供了自动配置功能,可实现其开箱即用特性(创建完一个基本的项目以后,可零配置或者少量配置即可运行我们的项目)

2.起步依赖
起步依赖本质是一个maven项目对象模型(project object model,pom),定义了对其他库的传递依赖,这些依赖整合在一起可支持某项功能。我们根据起步依赖的名称基本可推断出它所支持的功能,这一点也是我们在工作中需要学习和积累的地方,也就是代码的可读性。另外,我们在引入某项起步依赖的时候无需指定版本,因为这是由引入的Springboot版本决定的,请不要画蛇添足,带来不必要的麻烦。

3.监控检查
SpringBoot中引入健康检查模块只需要在pom.xml中添加相应的依赖即可,具体的如下图所示。该模块能够为SpringBoot应用提供一系列用于监控的端点。
在这里插入图片描述

3 Spring Boot 自动配置原理是什么?

一个springboot工程中只有一个启动类(@SpringBootApplication),当启动类运行的时候,会把启动类所在的包下的资源以及子包下的资源全都加载到内存中去。

Spring Boot实现自动配置原理主要依赖于此三个注解实现。
1.@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
2.@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
3.@ComponentScan Spring组件扫描。

4 Spring Boot 的核心配置文件有哪几个?它们的区别是什么?

Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。

application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。

bootstrap 配置文件有以下几个应用场景。
1.使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
2.一些固定的不能被覆盖的属性;
注意:1和2实现的原因是bootstrap 配置文件和 application 配置文件同时存在时,优先加载bootstrap 配置文件

5 Spring Boot 的配置文件有哪几种格式?它们有什么区别?

.properties 和 .yml,它们的区别主要是书写格式不同。
1 .properties文件的格式是key=value格式,并且.properties后缀文件里面的内容都是字符串,所以不要添加双引号
2 .yml文件的格式是key:value,在使用yml文件的时候我们需要注意层级结构的关系进行一定的缩进,并且输入value是添加空格

7 你如何理解 Spring Boot 配置加载顺序?

在 Spring Boot 里面,可以使用以下几种方式来加载配置。

1)properties文件;

2)YAML文件;

3)系统环境变量;

4)命令行参数;

总结话语:有properties文件和YAML文件优先加载properties文件,如果properties文件有application.properties和bootstrap.properties优先加载bootstrap.properties文件先

8 你如何理解 Spring Boot 中的 Starters?

Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。

9 怎么使用 Maven 来构建一个 SpringBoot 程序?

1.直接创建一个maven porject ——create a simple project创建一个简单的maven工程。定义还Group id(标识启动类)和Artifact id,然后选择jar/或者war 选择哪一个看我们有无前端页面需要,有需要就选择war,否者选择jar

2.核心配置一共有三项(继承,依赖,插件)

<parent></parent>  <dependencies></dependencies><properties></properties>

注:如果想简单的项目跑起来只需要添加spring web依赖即可,添加个端口号就行,默认端口是8080。springboot项目内置了tomcat服务器,我们也可以去除内嵌的tomcat服务器,使用自己所想使用的服务器。
3创建启动类包,添加spring boot main method方法,加上@SpringBootApplication注解即可。

注意:如果想整合一些前端资源的话,可以在src/main/resources,添加static或者templates文件夹。
1 static前端资源可以直接访问
2 templates只能通过转发或者重定向访问,不然看到的就是404找不到页面结果

10 如何使用 Spring Boot 实现异常处理?

Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个 ControlerAdvice 类(全局异常处理类),来处理控制器类抛出的所有异常。

11 Spring Boot、Spring MVC 和 Spring 有什么区别?

Spring框架 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC(把创建对象的权利交给spring) 控制反转。当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。

Spring MVC框架提供了一种分离式的方法来开发 Web 应用,其功能实现主要依赖于五大组件,使的我们开发 Web 应用将会变的非常简单。

1.前端控制器(DispatcherServlet):主要负责捕获来自客户端的请求和调度各个组件。

2.处理器映射器(HandlerMapping):根据url查找后端控制器Handler。

3.处理器适配器(HandlerAdapter):执行后端控制器(Handler),拿到后端控制器返回的结果ModelAndView后将结果返回给前端控制器DispatcherServlet。

4.后端控制器(处理器)(Handler):主要负责处理前端请求,完成业务逻辑,生成ModelAndView对象返回给HandlerAdapter。

5.视图解析器(ViewResolver):主要负责将从DispatcherServlet中拿到的ModelAndView对象进行解析,生成View对象返回给DispatcherServlet。

Spring Boot框架是为了解决Spring 和 SpringMVC 启动是需要配置大量的参数,Spring Boot 通过一个自动配置和启动类来解决这个问题。为了更快的使项目跑起来。

12 SpringBoot的 Actuator 是做什么的?

SpringBoot的 Actuator 允许我们对生产环境中的应用程序进行监视和管理,因为有一些指标必须在生产环境中进行检查和监控。集成 SpringBoot Actuator 到项目中非常简单。我们需要做的只是将 spring-boot-starter-actuator starter 引入到 POM.xml 文件当中即可。

13 Spring IOC,DI,AOP 如何 理解? ?

Spring IOC:IOC 是 Spring 中提供一种控制反转机制,目的是将我们对象的创建与管理权移交给spring,以实现对象关系的解耦,提高程序的可扩展性。

DI:DI 是 Spring 中的依赖注入机制,IOC 的实现需要借助这种机制.我们通常会这样理解,Spring Bean 容器中的IOC 思想一种目标,DI 是实现这种思想的目标的手段。

AOP:AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善。实现在不修改源代码的情况下给程序动态添加额外功能的一种技术。

实际项目中通常会将系统分为两大部分,一部分是核心业务(业务逻辑),一部分是非核业务(系统服务,例如缓存redis的实现,日志的记录)。在编程实现时我们首先要完成的是核心业务的实现,非核心业务一般是通过特定方式切入到系统中,这种特定方式一般就是借助AOP进行实现。

14 Spring MVC 处理流程

在这里插入图片描述

回答:客户端发出一个HTTP请求到服务器,首先会给我们的前端控制器DispatcherServlet所拦截,然后再把我们的请求交给我们的处理器映射器HandlerMapping,如果该请求路径是对的则返回Controller名字给前端控制器,请求路径不对就返回404找不到页面。前端控制器会将Controller名字交给处理器适配器HandlerAdaptor,然后处理器适配器会找到合适的后端控制器Handler来处理。最后视图解析器ViewReslover拼接前缀与后缀返回一个view对象来进行展现。

14.1 springMVC的常用注解有哪些?

1、@Controller/@RestController

@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。

2、@RequsestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

3、@Resource和@Autowired
  @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

4、@PathVariable
  用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数

5、@RequestParam
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上,用例:

不加@RequestParam写法参数为非必传,加上参数为必传。参数名和传过来的参数名相同。

加上@RequestParam可以通过@RequestParam(required = false)设置为非必传。因为required值默认是true,所以默认必传。

@RequestParam可以通过@RequestParam(“userId”)或者@RequestParam(value = “userId”)指定参数名。

6、@Model
我们可以通过@Model注解把数据传输到前端页面,Model本质上就是一个request域对象,转发前后的对象是同一个。

7.@ResponseBody

把Java对象转化为json对象,用于ajax处,返回的不是一个页面而是一个某种格式的数据

15 使用Spring 框架的好处是什么?

1:轻量:Spring 是轻量的,基本的版本大约 2MB。
2:控制反转:Spring 通过控制反转实现了松散耦合,以实现对象关系的解耦,提高程序的可扩展性。
3:面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务分开
4:容器:Spring 包含并管理应用中对象的生命周期和配置。
5:MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的一个很好的替代品。
6:事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。@Transaction注解
7:异常处理:结合@ControllerAdvice(只要有这注解描述的类为全局异常处理类)和 @ExceptionHandler注解实现

16 MyBatis(IBatis)的好处是什么??

1.mybatis 把 sql 语句从 Java 源程序中独立出来,放在单独的 XML 文件中编写,给程序的维护带来了很大便利。并且同时简单的sql我们可以使用注解在mapper层/Dao层写也ok。
2.mybatis 封装了底层 了JDBC API 的调用细节,并能自动将结果集转换成JavaBean对象,大大简化了Java 数据库编程的重复工作。
3.因为mybatis 需要程序员自己去编写sql 语句,程序员可以结合数据库自身的特点灵活控制sql语句,因此能够实现比hibernate(sql写死,不需要程序员自己写) 等全自动 orm 框架更高的查询效率,能够完成复杂查询。

16.1 Mybatis批量插入的方法有?

方法1:

<insert id="addEmps">
        INSERT INTO tbl_employee (last_name,email,gender,d_id)
        VALUES
          <foreach collection="emps" item="emp" separator=",">
            (#{emp.lastName},#{emp.email},#{emp.gender},#{emp.dept.id})
         </foreach>
</insert>

对应的mapper接口方法:

 public void addEmps(@Param("emps") List<Employee> emps);

本质上就是利用了动态sql的原理实现了多条sql的语句插入

方法2:
在使用方法二之间我们需要对数据库做一些设置,我们在连接数据库写上下面的属性:allowMultiQueries=true,这样我们就可以在xml文件写sql的时候执行多条插入语句,用分号隔开即可。

17MyBatis应用动态SQL解决了什么问题??

有时候,固定的 sql 语句不能够满足我们的应用需求。这个时候需要在基础的sql语句上建立动态的查询语句。
Mybatis 提供了多种标签,可以提供动态查询语言。比如说在开发的时候,遇到这样的场景,界面提供了多种查询,但是都是非必填写,所以此时结合mybatis的动态sql完成我们的业务需求最为合适不过了。

自己经历的业务:用户在查询日志的时候,上面有一个搜索框,当用户在搜索框不输入任何内容的时候我们默认实现的sql语句是将前30条日志信息显示在第一页,当用户在输入框输入特定的查询条件时我们的sql语意就会反生变化,会按照用户的查询条件生成对应的sql语句,这就是mybatis的动态sql最为强大之处了。

18 mybatis的缓存机制,一级,二级介绍一下

一级缓存
默认开启
SqlSession 级别的缓存,实现在同一个会话中数据的共享
一级缓存的生命周期和 SqlSession 一致
当有多个 SqlSession 或者分布式环境下,数据库写操作会引起脏数据。

二级缓存
默认不开启,需手动开启
SqlSessionFactory 级别的缓存,实现不同会话中数据的共享,是一个全局变量
可自定义存储源,如 Ehcache,当开启缓存后,数据查询的执行的流程是:二级缓存>一级缓存>数据库

19 mybatis的基本工作流程

1.读取配置文件,配置文件包含数据库连接信息和 Mapper 映射文件或者 Mapper 包路径。
2.有了这些信息就能创建 SqlSessionFactory,SqlSessionFactory 的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡
3.SqlSessionFactory 建立 SqlSession,目的执行 sql 语句,SqlSession 是过程级,一个方法中建立,方法结束应该关闭
4.当用户使用 mapper.xml 文件中配置的的方法时,mybatis 首先会解析 sql 动态标签为对应数据库 sql 语句的形式,并将其封装进 MapperStatement 对象,然后通过 executor 将 sql注入数据库执行,并返回结果。
5.将返回的结果通过映射,包装成 java 对象。

20 JDBC 编程有哪些不足之处,MyBatis 是如何解决这些问题的?

JDBC 编程的不足之处:
1.数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
2.Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变java 代码。
3.向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数一一对应。
4.对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对象解析比较方便。

MyBatis 的解决方案:
1.在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。
2.将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。
3.Mybatis 自动将 java 对象映射至 sql 语句。
4.Mybatis 自动将 sql 执行结果映射至 java 对象。
5.Mybatis提供动态sql

21 使用 MyBatis 的 mapper 接口调用时有哪些要求?

1.Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同
2.Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
3.Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的 resultType 的类型相同(只有select语句才必须需要写返回值的类型,其他的查询可以不写)
4.Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径(包名+类名)

22 Spring 支持几种bean的作用域

Spring 框架支持以下五种 bean 的作用域:

singleton : bean 在每个 Spring ioc 容器中只有一个实例。

prototype:一个 bean 的定义可以有多个实例。

request:每次 http 请求都会创建一个 bean,该作用域仅在基于 web 的 SpringApplicationContext 情形下有效。

session:在一个 HTTP Session 中,一个 bean 定义对应一个实例。该作用域仅在基于 web的 Spring ApplicationContext 情形下有效。

global-session:在一个全局的 HTTP Session 中,一个 bean 定义对应一个实例。该作用域仅在基于 web 的 Spring ApplicationContext 情形下有效。

缺省的 Spring bean 的作用域是 Singleton。

23 Shiro框架概述

Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。

在这里插入图片描述

在这里插入图片描述

23.1shiro框架实现登录功能拦截与放行

1.添加shiro框架的依赖
2.创建一个配置类,我们随意起一个名字叫SpringShiroConfig,再加上@Configuration注解
3.结合@Bean注解,定义一个返回值为SecurityManager(shiro框架的核心对象)的方法。结果显然SecurityManager是一个接口,不能返回,只能返回它的实现类对象DefaultWebSecurityManager

解释:被@Bean注解描述的方法,表示这个方法的返回值会交给spring框架管理
4.配置过滤器,对请求进行过滤并且设置过滤规则,最后还要设置一个登录页面,当用户没有登录的时候就要让它跳转到这个登录页面
5.ShiroFilterFactoryBean去关联SecurityManager(谁会去监控用户到底有没有登录而跳转到登录页面呢?SecurityManager)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值