IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring-Mybatis -> 正文阅读

[Java知识库]Spring-Mybatis

1.什么是Spring?

开源的轻量级的应用开发框架,他可以简化开发、解耦对象的依赖关系、集成其他框架,而且设计优雅。

2.Spring有哪些核心功能?

SpringIOC、SpringMVC、SpringAOP

3.什么是SpringIOC?有哪些依赖注入方式呢?

SpringIOC就是控制反转,我们将对象的依赖关系交给Spring容器来进行管理。容器通过DI依赖注入的方式来使用创建的Bean对象

构造器注入、Set方法注入、注解注入

4.注解注入有哪些方式?他们有什么区别?

注解注入有两种方式:@Autowired注解和@Resource注解。

@Autowired注解是Spring框架提供的注解,可以通过构造器注入,也可以通过Set方法注入,是基于类型注入的。

@Resource注解是JDK提供的一个注解,只是Spring框架也能识别他,它只能通过Set方法注入,是基于Bean名称注入的

5.BeanFactory和FactoryBean有什么区别?

BeanFactory是Spring当中的一个接口,Spring当中的容器都实现了这个接口,本质上我们可以认为他就是Spring容器接口。FactoryBean是工厂Bean,它与普通的Bean不同,其返回对象不是指定类的实例,而是该工厂Bean的getObject()方法所返回的对象。

6.Spring当中的BeanPostProcessor是什么?

Spring为我们提供了一个BeanPostProcessor接口,该接口可以在Bean初始化时让我们做一些干预操作。我们需要自己用一个类实现该接口,接口中有两个方法,在Bean初始化前做一些事情,在B类初始化后做一些事情,加入具体的逻辑即可。

7.什么时Spring中的Aware接口?

在实际的开发中,我们经常要用到Spring容器本身的功能或资源,Spring提供了一系列的Aware接口来实现具体的功能,只要我们的bean实现了具体的Aware接口,并实现其方法,Spring容器就会把具体的资源传给我们。

我们常用的Aware接口有:

BeanNameAware:获取容器中Bean的名称

BeanFactoryAware:获取当前的BeanFactory,这样可以调用容器的服务

ApplicationContextAware:获取当前的Spring容器

8.Spring是如何解决循环依赖的?

Spring创建一个Bean对象的基本步骤是,如果有一个类A中,依赖了类B。先创建A,再创建A的时候发现需要创建B,这时会停下来,去创建B,B创建完毕后,再继续创建A,并把B注入到A中。循环依赖指的是,一个对象A中依赖了对象B,对象B又依赖了对象A,那这样就会出问题了。

整个IOC容器解决循环依赖,用到的几个重要成员:

singletonObjects:一级缓存,存放完全初始化好的Bean的集合,从这个集合中取出来的Bean可以立马返回

earlySingletonObjects:二级缓存,存放创建好但没有初始化属性的Bean的集合,它用来解决循环依赖

9.Spring中的bean是线程安全的吗?那要怎么解决呢?

当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。我们可以通过@Scope("prototype")注解来指定创建模式为多例。也可以通过ThreadLocal来解决这个问题(了解)。

10.SpringMVC中有几大组件?分别是哪些呢?他们是如何交互工作的?

SpringMVC有5大组件。

分别是DispatcherServlet(前端控制器)、HandlerMapping(请求派发控制器)、Controller(请求处理控制器)、ModelAndView(数据和视图名)、ViewResolver(视图解析器)。

1.客户端发送请求,直接请求到DispactchServlet

2.DispatcherServlet根据请求调用HandlerMapping,解析请求转发到Controller中

3.处理完业务逻辑后,会返回一个ModelAndView对象

4.ViewResolver会根据View进行视图解析。

5.DispatcherServlet返回给客户端进行视图渲染

11.转发和重定向有什么区别?

转发:一次请求,浏览器地址不变,可以通用共享数据,只能转发到系统内部

重定向:两次请求,浏览器地址改变,无法通用共享数据,可以重定向到内部或者外部。

12.什么是SpringBoot?

SpringBoot是用来简化Spring应用的初始搭建以及开发过程的全新框架,该框架使用特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

SpringBoot具有如下特性:

1.创建独立的Spring应用程序,通过main方法进行运行。

2.内置嵌入的Tomcat,可选择部署jar文件,也可部署war文件

3.简化Maven配置,SpringBoot的父工程帮我们管理了大量的maven依赖,我们可以不用关系版本号,只需要继承引用即可。

4.自动配置Spring,根据核心application.properties配置文件+代码注解使用,能自动配置Spring,无需要再繁琐的去配置xml文件

13.什么SpringAOP?那什么是切面编程?

AOP是面向切面的编程。切面编程是将原有业务中共通的处理逻辑抽离出来,进行独立的封装,然后通过配置作用到原有传统的业务处理方法上。例如我们常常用来做事务处理,日志处理,异常处理,权限处理等

14.切面编程的三大要素是什么?

切面:共通功能

切入点:对哪些方法进行切入

通知:在方法的什么位置切入

SpringAOP有三种配置切面的方式

1.通过xml+表达式进行配置

2.通过Aspect注解+表达式进行配置

3.通过Aspect注解+自定义注解配置

15.SpringAOP的底层原理是什么?Spring当中的动态代理有哪些实现方式?你能分别说说他们的机制吗?

SpringAOP的实现原理是动态代理技术。Spring采用两种方法来实现动态代理,分别是JDK动态代理技术和CGLIB动态代理技术,JDK动态代理技术要求我们实现InvocationHandler接口,当我们的代理类调用方法时,会被其invoke方法拦截,进行方法的增强,但它必须基于接口来实现。CGLIB底层采用的是字节码技术生成代理类,也是我们在调用代理类方法,被拦截,进行方法的增强,但它可以不基于接口来实现,而采用继承的方式来实现。

16.什么是事务?事务有哪些特征?

事务通常用于数据库领域,事务是指对数据库进行读或写的一组操作序列,要么都执行,要么都不执行,不允许执行一部分的情况;事务的操作结果只有两种,一种是提交成功,一种是提交不成功恢复到操作之前的状态。

事务的特征包含,即原子性、一致性、隔离性、持久性

原子性:事务是数据库的逻辑工作单位,事务中包括的诸多操作要么都做,要么都不做。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其它事物干扰。即一个事务内部的操作及使用的数据对
其它并发事务是隔离的,并发执行的各个事务之间不能互相打扰。
持久性:也称永久性,只一个事务一旦提交,它对数据库中数据的改变就应该是永久性
的。接下来的其它操作或故障不应该对其执行结果有任何影响。

17.Spring当中的事务隔离级别有几种?分别是什么呢?

5种

默认级别:使用数据库默认的隔离级别,Mysql默认是可重复读,Oracle默认读已提交

读未提交:一个事务读取到另一个事务未提交的数据

读已提交:一个事务提交的数据在另一个事务中才能读取到

可重复读:一个事务提交的数据,在另一个事务中依然读取不到

串行化:一个事务在操作数据的时候就会把该表锁住,其他事务只能等待

18.什么是SpringBoot的自动配置?

SpringBoot会读取classpath下的MATE-INF/spring.factories文件,其文件中我们可以添加配置好的类,SpringBoot会把这些类自动配置成bean加入的Spring容器中。

19.什么是Mybatis的一级缓存和二级缓存?

一级缓存是默认开启的,是sqlSession级别的缓存,在操作数据库时需要构造sqlSession对象,不同的sqlSession之间的缓存数据区域是互相不影响的,不同的sqlSession之间的缓存数据区域是互相不影响的,不同的sqlSession中的缓存是互相不能读取。

二级缓存需要手动开启,在xml中进行配置,是namespace级别的缓存,多个sqlSession可以共有二级缓存,二级缓存是跨SqlSession的

20.在Mybatis中用#{}取值和${}取值有什么区别?那什么是SQL注入?

#{}是做预编译取值,${}是做字符串拼接取值,${}可能会产生SQL注入问题。

SQL注入是指数据库被拖库,导致重要信息泄露,本质是把用户的数据当做有效代码来执行SQL语句。


?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:15:31  更:2021-11-20 18:17:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:44:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码