牛客网刷题笔记-spring-2023.3.28

Spring对事务隔离级别提供了支持,并通过枚举类型Propagation定义了7种事务隔离级别,下列关于Propagation成员的解释中错误的是(   )
A required
REQUIRED:若当前存在事务,就沿用当前事务,否则就新建一个事务来运行此方法。
B require_new
REQUIRED_NEW:无论当前是否存在事务,都要新建一个事务来运行此方法。
C support
SUPPORTS:若当前存在事务,就沿用当前事务,否则就采用无事务的方式运行此方法。
Nested 若当前存在事务,则采用嵌套事务执行此方法,否则就创建新事务来执行此方法
NESTED:无论当前是否存在事务,都创建嵌套事务,并在嵌套事务中运行此方法。
正确答案:D
官方解析:NESTED表示,若当前存在事务,则采用嵌套事务执行此方法,否则就创建新事务来执行此方法。
Propagation
Supports–支持事务,有事务用当前事务,无事务则无事务运行
Mandatory–支持当前事务,如果当前没有事务,则抛出异常
Requires_new–不管当前有没有事务,都会新增事务执行。如果当前有事务,当前事务挂起。
Not_support–以非事务方式执行,如果当前存在事务,则事务挂起。
Never --以非事务执行,如果当前存在事务,抛出异常
Nested–如果当前存在事务,采用嵌套事务执行该方法,否则,创建新事务执行
Requred–如果当前有事务,则执行,否则,创建一个新的事务。

spring五大隔离级别和七大传播类型
一、五大事务隔离级别
Default read_uncommitted
1、DEAULT(默认属性),这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应。
2、READ_UNCOMMITTED (读未提交),这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读,是不使用的。
3、READ_COMMITTED (读已提交),保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。默认的事务隔离级别。 4、(repateble)REPATEBLE_READ(可重复读),这种事务隔离级别可以防止脏读、不可重复读,但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读。 说一下什么是不可重复读。比如一个事务中两次查询一条数据,中间有另一个事务修改了数据,就出现了,不可重复读的情况。 5、 SERIALIZABLE(串行化),这是花费最高代价但是最可靠的事务隔离级别,事务被处理为顺序执行。除了防止脏读、不可重复读外,还避免了幻像读。一般不使用,效率太低。 说一下什么是幻读。比如,比如一个事务中两次查询所有数据,中间有另一个事务插入了一条数据,这样导致出现了幻读的情况。  
二、七大事务传播机制
1、requires_new 新建事务,如果当前存在事务,把当前事务挂起。
2、required(默认属性) 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
3、supports 支持当前事务,如果当前没有事务,就以非事务方式执行。 4、 mandatory 支持当前事务,如果当前没有事务,就抛出异常。
5、not_supports 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、never 以非事务方式执行,如果当前存在事务,则抛出异常。
7、nested 支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。 嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。

下列关于@Transactional注解的说法中,错误的是(   )
A
@Transactional可以作用在类上,代表这个类的所有方法都将启用事务。//公共非静态
B
可以通过@Transactional的propagation属性,指定事务的传播行为。
C
可以通过@Transactional的isolation属性,指定事务的隔离级别。
D
可以通过@Transactional的rollbackFor属性,指定发生哪些异常时回滚。
正确答案:A
官方解析:
@Transactional可以作用在类上,代表这个类的所有公共非静态方法都将启用事务。
可以通过@Transactional的propagation属性,指定事务的传播行为。
可以通过@Transactional的isolation属性,指定事务的隔离级别。
可以通过@Transactional的rollbackFor属性,指定发生哪些异常时回滚。

在spring中有两种事务的实现方式,分别是编程式事务管理和编码式事务管理。
编程式事务一般使用的是TransactionTemplate工具类来实现
spring中使用的是@Transactional注解,可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性。

参数描述:
1、readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)
2、rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:
指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)
指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})
3、rollbackForClassName 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:
指定单一异常类@Transactional(rollbackForClassName=”RuntimeException”)
指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,”Exception”})
4、noRollbackFor 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:
指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)
指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})
5、noRollbackForClassName 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:
指定单一异常类名称:@Transactional(noRollbackForClassName=”RuntimeException”)
指定多个异常类名称:@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”})
6、propagation 该属性用于设置事务的传播行为。例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
7、isolation 该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置
8、timeout 该属性用于设置事务的超时秒数,默认值为-1表示永不超时

在Spring MVC中,我们可以通过URL携带参数。例如,“/user/{id}” 是为某Controller中某方法声明的访问路径,其中“{id}”代表这一级携带的是id参数。那么,下列注解中可以用于提取id参数的是(   )
@RequestParam
@RequestMapping
@ResponseBody
@PathVariable
解析
用于从URL中提取参数的注解是@PathVariable。

@RequestParam 用于获取查询参数
@PathVariable 用于获取路径参数
@RequestMapping用来在前端用ajax异步请求输入的路径信息,
@responsebody是设置响应体的格式
@RequestBody:用于读取 Request 请求的 body 部分并且Content-Type 为application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。

下列Spring MVC注解中,可以映射多种HTTP请求类型的是(   )
A
@RequestMapping
B
@GetMapping
C
@PostMapping
D
@DeleteMapping
正确答案:A
官方解析:@RequestMapping注解可以映射多种HTTP请求类型,具体的类型通过method配置项指定。为了简化method配置项,Spring 4.3版本新增了几个注解,这些注解可以看成是@RequestMapping注解的快捷方式,相当于固定了method配置项的值,这些注解包括:@GetMapping、@PostMapping、@PatchMapping、@PutMapping、@DeleteMapping。

@RequestMapping注解的属性不包括以下哪个(   )
A
method
B
value
C
required
D
params
正确答案:C
官方解析:method属性代表指定请求的method的类型,value属性指请求的实际地址,params是指定request中一定要有的参数值。
required是@RequestParam注解的属性,是指该参数是否为必传项,默认为true,表示请求中一定要传入对应的参数。

下列关于@RequestParam注解的说明中,错误的是(   )
A
@RequestParam注解用于对HTTP请求参数和控制器方法参数进行映射。
B
@RequestParam注解的value成员用于指定要映射的HTTP请求参数名。
C
@RequestParam注解的required成员用于指定该参数是否必填。
D
@RequestParam注解的required成员默认值为false,也就是映射的参数默认可以为空。
正确答案:D
官方解析:
@RequestParam注解的required成员用于指定该参数是否必填,其默认值为true,也就是映射的参数默认不能为空。
@RequestParam注解用于对HTTP请求参数和控制器方法参数进行映射。
@RequestParam注解的value成员用于指定要映射的HTTP请求参数名。
@RequestParam注解的required成员用于指定该参数是否必填。

@RequestParam 
1、可以对传入参数指定参数名
@RequestParam String inputStr
// 下面的对传入参数指定为aa,如果前端不传aa参数名,会报错
@RequestParam(value=“aa”) String inputStr

2、可以通过required=false或者true来要求@RequestParam配置的前端参数是否一定要传
// required=false表示不传的话,会给参数赋值为null,required=true就是必须要有
@RequestMapping(“testRequestParam”)
public String filesUpload(
@RequestParam(value=“aa”, required=true) String inputStr,
HttpServletRequest request)
默认值是true,映射的参数不能为空。

3、如果用@RequestMapping注解的参数是int基本类型,但是required=false,这时如果不传参数值会报错,因为不传值,会赋值为null给int,这个不可以
@RequestMapping(“testRequestParam”)
public String filesUpload(
@RequestParam(value=“aa”, required=true) String inputStr,
@RequestParam(value=“inputInt”, required=false) int inputInt,
HttpServletRequest request) {
// …省略
return “index”;
}

4.@RequestParam 有三个属性:
(1)value:请求参数名(必须配置)
(2)required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)
(3)defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置)
5.比较常用的两种配置
//配置一个
@RequestParam(“”) 或 @RequestParam(value=“”)
//配置多个
@RequestParam(value=“”, required=true, defaultValue=“”)

下列不属于Spring Boot注解的是(   )
@Controller
@EnableAutoConfiguration
@Conditional
@SpringBootApplication
解析
1、@Controller是Spring MVC的注解。
用于 Spring MVC 项目中的控制器类。
2、@Conditional (Spring Boot注解)翻译过来就是:条件装配, 就是指满足指定的条件,则进行组件注入,如果不满足,则不注入。
3、@EnableAutoConfiguration 启用 SpringBoot 的自动配置机制
4、@SpringBootApplication,SpringBoot核心注解 ,包含了以下3 个注解
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描

下列关于@ComponentScan注解的说法中,错误的是(   )
A
@ComponentScan注解用于定义Bean的扫描策略。
B
@ComponentScan注解默认规则是对当前包的子包中的Bean进行扫描。//对当前包和子包
C
@ComponentScan注解的basePackages属性用于自定义要扫描哪些包。
D
@ComponentScan注解只是定义了扫描范围,在此范围内带有特定注解的Bean才会被载入容器。
正确答案:B
官方解析:@ComponentScan注解默认规则是对当前包及其子包中的Bean进行扫描。

MVC设计模式下软件分为哪三层(   )
A
Model
B
View
C
Controller
D
Context
正确答案:ABC
你的答案:未作答
官方解析:MVC设计模式下,Model代表的是数据,View代表的是用户界面,Controller代表的是数据的处理逻辑,它是Model和View这两层的桥梁。
知识点:Spring

MVC的处理过程,
1)首先控制器Controller接受用户View的请求,并决定应该调用哪个模型Model来进行处理,
2)然后模型M用业务逻辑Controller来处理用户的请求View并返回数据,
3)最后控制器Controller用相应的视图V格式化模型返回的数据,并通过表示层呈现给用户。
Spring IoC的注入方式有三种,分别是基于属性注入、基于构造方法注入、基于setter方法注入

Spring
IOC(控制反转):无需创建对象,而是通过Spring框架自动创建
DI(依赖注入):通过构造函数/setter方法/属性注入,将属性数据初始化.
AOP(面向切面编程): 针对相同功能的封装,无需针对不同的对象,写2遍代码。把应用业务逻辑和系统服务分开。

@Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。

@Override 注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素。它可以强制一个子类必须重写父类方法或者实现接口的方法。

@Autowired是一种注解,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,@Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上,也可以放在任意方法上表示,自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。

@Autowired注解提供这样的规则,首先根据类型找到对应的Bean,如果对应类型的 Bean 不是唯一的,那么就根据属性名称和Bean的名称进行匹配。如果匹配得上,就会使用该Bean。如果还无法匹配,就会抛出异常。

以下关于@Autowired注解说法正确的是(   )
A
@Autowired是Spring提供的注解。
B
@Autowired是JDK提供的注解。
C
@Autowired注解只能根据类型注入Bean。
D
@Autowired注解既可以根据类型注入Bean也可以根据名称注入Bean。
正确答案:AC
你的答案:D
官方解析
@Autowired是Spring提供的注解,它提供这样的规则:首先根据类型找到对应的Bean, 如果对应类型的 Bean 不是唯一的,那么就根据属性名称和Bean的名称进行匹配。如果匹配得上,就会使用该Bean;如果还无法匹配,就会抛出异常。
@Autowired是Spring提供的注解。

下列关于@Bean注解的说法中,错误的是(   )
A
@Bean注解作用在方法上,表示该方法的返回值将被装配到容器中。
B
@Bean注解包含name属性,可以通过该属性指定装配的Bean的名称。
C
@Bean注解依赖于@Configuration注解,即它所在的类必须带有@Configuration注解。//不是必须
D
@Bean注解可以装配任意的Bean,尤其适合装配那些初始化过程十分复杂的Bean。
正确答案:C
官方解析:@Bean注解通常出现在带有@Configuration注解的类中,但这不是必要的条件,它也可以出现在带有@Component注解的类中,甚至是普通的类中。

@Bean注解作用在方法上,表示该方法的返回值将被装配到容器中。
@Bean注解包含name属性,可以通过该属性指定装配的Bean的名称。
@Bean注解可以装配任意的Bean,尤其适合装配那些初始化过程十分复杂的Bean。
@Bean注解通常出现在带有@Configuration注解的类中,但这不是必要的条件,它也可以出现在带有@Component注解的类中,甚至是普通的类中。

基于java的配置
@Configuration 注解一个类表明该类可以被 Spring IoC 容器用作 bean 定义的来源。
@Bean 注解告诉 Spring使用 @Bean 注解的方法将返回一个对象,该对象应在 Spring 应用程序上下文中注册为 bean。
@Import 注解允许从另一个配置类加载@Bean 定义。

在Spring MVC中,若要实现上传功能,则需要使用的核心组件是(   )
HttpServletRequest
HttpServletResponse
MultipartHttpServletRequest
MultipartFile
解析 CD
在Spring MVC中实现上传功能,主要依赖MultipartHttpServletRequest从读取请求中的文件,然后对读取到的MultipartFile类型进行处理。

下列关于Spring中Bean作用域的说法错误的是(   )
A
Bean的作用域可以通过@Scope注解来修改,该注解有五个不同的取值。
B
对定义为session的Bean,每次HTTP请求都会创建一个新的Bean。//一个session共享
C
每次通过Spring容器获取prototype定义的Bean时,容器都将创建一个新的Bean实例。
D
作用域为globalSession的Bean来讲,在一个全局的HTTP Session中,容器会返回该Bean的同一个实例
正确答案:B
Bean的作用域可以通过@Scope注解来修改,该注解有五个不同的取值。
每次通过Spring容器获取prototype定义的Bean时,容器都将创建一个新的Bean实例。
作用域为globalSession的Bean来讲,在一个全局的HTTP Session中,容器会返回该Bean的同一个实例
作用域为globalSession的Bean来讲,在一个全局的HTTP Session中,容器会返回该Bean的同一个实例

bean的作用域由@scope注解来修改,该注解有五个不同的取值,分别是:singleton、prototype、request、session、global-session。
1.singleton,在每一个Spring容器中,一个Bean定义只有一个对象实例(默认为singleton)
2.prototype,允许Bean的定义可以被实例化任意次(每次调用都创建一个一个实例)
3.request,在一次HTTP请求中,每个Bean定义对应一个实例。该作用域仅在基于Web的Spring上下文(例如SpringMVC)中才有效
4.session,在一个HTTP Session中,每个Bean定义对应一个实例。该作用域仅在基于Web的Spring上下文(例如SpringMVC)中才有效
5.global-session,在一个全局HTTP Session中,每个Bean定义对应一个实例。该作用域仅在基于Web的Spring上下文(例如SpringMVC)中才有效
6.
Spring Bean 的默认作用范围是(   )
A
singleton
B
prototype
C
request
D
session
A

下列选项中,哪一个不是Spring MVC的核心组件(   )
A
DispatcherServlet
B
SpringFactoriesLoader
C
HandlerMapping
D
ModelAndView
正确答案:B
你的答案:A
官方解析:SpringFactoriesLoader是Spring Boot的组件,不是Spring MVC的组件。
SpringMVC
五大核心组件
1.DispatcherServlet  请求入口
2.HandlerMapping    请求派发,负责请求和控制器建立一一对应的关系
3.Controller       处理器
4.ModelAndView     封装模型信息和视图信息
5.ViewResolver    视图处理器,定位页面

关于Spring AOP的织入,下列说法错误的是(   )
A
织入,就是将方面组件中定义的横切逻辑,织入到目标对象的连接点的过程。
B
可以在编译时织入,需要使用特殊的编译器。
C
可以在装载类时织入,需要使用特殊的类装载器。
D
可以在运行时织入,需要使用特殊的JRE。//需要为目标生成代理对象。

正确答案:D
解析:
织入,就是将方面组件中定义的横切逻辑,织入到目标对象的连接点的过程。
可以在编译时织入,需要使用特殊的编译器。
可以在装载类时织入,需要使用特殊的类装载器。
可以在运行时织入,需要为目标生成代理对象。

AOP像一台织布机,将目标类、增强或引介通过AOP这台织布机天衣无缝地编织到一起。根据不同的实现技术,AOP有三种织入的方式:
a、编译期织入,这要求使用特殊的Java编译器。
b、类装载期织入,这要求使用特殊的类装载器。
c、动态代理织入,在运行期为目标类添加增强生成子类的方式。
Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

下列关于Spring AOP的实现方式的说法中,正确的是(   )
A
JDK动态代理,是Java提供的动态代理技术,可以在运行时创建接口的代理实例。
B
JDK动态代理,是Java提供的动态代理技术,可以在运行时创建子类的代理实例。
C
CGLib动态代理,采用底层的字节码技术,在运行时创建接口代理的实例。
D
CGLib动态代理,采用底层的字节码技术,在运行时创建子类代理的实例。
正确答案:AD
你的答案:B
官方解析:JDK动态代理,是Java提供的动态代理技术,可以在运行时创建接口的代理实例。Spring AOP默认采用这种方式,在接口的代理实例中织入代码。CGLib动态代理,采用底层的字节码技术,在运行时创建子类代理的实例。当目标对象不存在接口时,Spring AOP就会采用这种方式,在子类实例中织入代码。
JDK动态代理,是Java提供的动态代理技术,可以在运行时创建接口的代理实例。
CGLib动态代理,采用底层的字节码技术,在运行时创建子类代理的实例。

关于IoC注解,下面说法错误的是(   )
A
@Autowired用于注入Bean,该注解只能写在成员变量的前面。//还可以写在set方法、构造器上
B
@Qualifier用于声明Bean的名称,该注解只能引用Bean的自定义名称。//也可以引用默认名称;
C
@Bean用于装配第三方的Bean,它不能装配自定义的Bean。//可以用于装配任何Bean。

D
@Configuration用于声明配置类,该注解是基于@Component实现的。
正确答案:ABC
官方解析:@AutoWired注解还可以写在set方法、构造器上;@Qualifier注解也可以引用默认名称;@Bean注解可以用于装配任何Bean。
@AutoWired注解还可以写在set方法、构造器上;
@Qualifier注解也可以引用默认名称
@Bean注解可以用于装配任何Bean。
@Configuration用于声明配置类,该注解是基于@Component实现的。

下列选项中,哪一项不是Spring AOP支持的通知类型(   )
A
前置通知
B
后置通知
C
织入通知
D
异常通知
正确答案:C
官方解析:Spring AOP支持的通知类型包括前置通知、后置通知、环绕通知、返回通知、异常通知。

aop的五类通知:
前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
后置通知/正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
异常返回通知[After throwing advice]:在连接点抛出异常后执行。
返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。

Spring创建Bean的方式有哪几种方式(   )
A
构造器
B
接口
C
实例工厂
D
静态工厂
正确答案:ACD
官方解析:Spring容器创建Bean对象的方法有三种方式,分别是:用构造器来实例化,使用静态工厂方法实例化和使用实例工厂方法实例化

关于BeanFactory和FactoryBean,下列说法正确的是(   )
A
BeanFactory是所有Spring Bean的容器根接口。
B
BeanFactory是一种创建Bean的方式。
C
FactoryBean是所有Spring Bean的容器根接口。
D
FactoryBean是一种创建Bean的方式。
正确答案:AD
你的答案:BCD
官方解析:

BeanFactory是所有Spring Bean的容器根接口,其给IoC容器提供了一套完整的规范
FactoryBean是 一种创建Bean的方式,是对Bean的一种扩展。

下列选项中,哪个不是Spring MVC拦截器的方法(   )
A
preHandle()
B
postHandle()
C
afterHandle()
D
afterCompletion()
正确答案:C
官方解析:Spring MVC拦截器包含三个方法:preHandle()、postHandle()、afterCompletion()。

下列选项中,属于Spring容器的类有(   )
A
BeanFactory
B
FactoryBean
C
ApplicationContext
D
ContextApplication
正确答案:AC
你的答案:B
官方解析:Spring提供了众多容器类,最常用的有BeanFactory和ApplicationContext。

下列关于@EnableAutoConfiguration注解说法正确的是(   )
A
该注解由组合注解@SpringBootApplication引入。
B
该注解作用是开启Spring Boot自动配置。
C
该注解会扫描各个jar包下的spring.factories文件,并加载文件中注册的AutoConfiguration类等。
D
@EnableAutoConfiguration的关键功能是通过@Import注解导入的ImportSelector来完成的。
正确答案:ABCD
你的答案:AB
官方解析:@EnableAutoConfiguration由@SpringBootApplication引入,它的主要功能是启动Spring应用程序上下文时进行自动配置,它会尝试猜测并配置项目可能需要的Bean。从源代码得知@Import是@EnableAutoConfiguration注解的组成部分,也是自动配置功能的核心实现者。

关于Spring容器,下面说法错误的是(   )
A
Spring容器也叫IoC容器,本质上就是一个工厂。
B
Spring容器不但可以管理Bean,还能管理Bean的生命周期、作用域。
C
一个Web应用中,通常只有一个Spring容器,该容器需要我们主动创建。
D
Spring容器的顶层接口是BeanFactory,而常用的是其子接口ApplicationContext。
正确答案:C
在Web应用中,服务器启动过程中会自动创建Spring容器。一个类实现ApplicationContextAware接口,重写setApplicationContext方法就可以获取到ApplicationContext对象。
Spring容器也叫IoC容器,本质上就是一个工厂。
Spring容器不但可以管理Bean,还能管理Bean的生命周期、作用域。
Spring容器的顶层接口是BeanFactory,而常用的是其子接口ApplicationContext。

下列关于Spring MVC注解的描述中,错误的是(   )
A
@RequestMapping可以声明类或方法的访问路径,还可以声明请求的方式。
B
@PathVariable可以将请求路径中的参数,绑定到控制器中方法的参数。
C
@RequestParam可以将请求对象中的参数,绑定到控制器中方法的参数。
D
@ResponseBody用于向浏览器响应字符串,它只能应用于异步请求之中。//但不代表它只能应用于异步请求之中。
正确答案:D
@ResponseBody一般在异步获取数据时使用,但不代表它只能应用于异步请求之中。
@RequestMapping可以声明类或方法的访问路径,还可以声明请求的方式。
@PathVariable可以将请求路径中的参数,绑定到控制器中方法的参数。
@RequestParam可以将请求对象中的参数,绑定到控制器中方法的参数。

关于Spring MVC拦截器,下列说法错误的是(   )
A
开发Spring MVC拦截器,需实现WebMvcConfigurer接口。//HandlerInterceptor
WebMvcConfigurer是mvc配置类需要实现的接口
B
preHandle方法在Controller之前执行,若返回false,则终止执行后续的请求。
C
postHandle方法在Controller之后、模板之前执行。
D
afterCompletion方法在模板之后执行。
正确答案:A
拦截器需实现HandlerInterceptor接口,而WebMvcConfigurer接口是MVC配置类要实现的接口。
preHandle方法在Controller之前执行,若返回false,则终止执行后续的请求。
postHandle方法在Controller之后、模板之前执行。
afterCompletion方法在模板之后执行。

.
在使用@Autowired注解时,如果一个类可以有多种类型,就会对Spring IoC 容器注入造成困扰,这种情况我们称之为歧义性,为解决这一问题,我们可以使用(   )注解。
A
@Component
B
@Primary
C
@Resource
D
@Qualifier
正确答案:BD
官方解析:
当发现有多种类型的Bean时,@Primary注解会通知IoC容器优先使用它所标注的Bean进行注入;
@Quelifier注解可以与@AutoWired注解组合使用,达到通过类型和名称一起筛选Bean的效果。

已知项目中定义了如下Controller:
1
2
3
4
5
6
7
8
9 @Controller
@RequestMapping(“/user”)
public class UserControlelr {
    @RequestMapping(path = “/otp/{phone}”, method = RequestMethod.GET)
    @ResponseBody
    public String getOTP(@PathVariable(“phone”) String phone) {
        …
    }
}
以下URL中,可以正确访问UserController的getOTP方法的是(   )
A
/user/otp
B
/otp/user
C
/user/otp/13912345678
D
/otp/13912345678/user
正确答案:C
官方解析:Controller中方法的访问路径是“类的访问路径+方法的访问路径”,而getOTP()方法的访问路径有两级,其中第二级是代表手机号的字符串,所以正确答案是C。

关于Spring AOP的术语,下列说法错误的是(   )
A
连接点(join point),对应的是具体被拦截的对象,因为Spring只支持方法,所以被拦截的对象往往就是指特定的方法,AOP将通过动态代理技术把它织入对应的流程中。
B
切点(point cut),有时候,我们的切面不单单应用于单个方法,也可能是多个类的不同方法,这时,可以通过正则式和指示器的规则去定义,从而适配连接点。切点就是提供这样一个功能的概念。
C
通知(advice),就是按照约定的流程下的方法,分为前置通知、后置通知、环绕通知、事后返回通知和异常通知,它会根据约定织入流程中。
D
切面(aspect),即被代理的对象。//是一个可以定义切点、各类通知和引入的内容
正确答案:D
官方解析:
切面(aspect),是一个可以定义切点、各类通知和引入的内容,SpringAOP将通过它的信息来增强Bean的功能或者将对应的方法织入流程。
连接点(join point),对应的是具体被拦截的对象,因为Spring只支持方法,所以被拦截的对象往往就是指特定的方法,AOP将通过动态代理技术把它织入对应的流程中。
切点(point cut),有时候,我们的切面不单单应用于单个方法,也可能是多个类的不同方法,这时,可以通过正则式和指示器的规则去定义,从而适配连接点。切点就是提供这样一个功能的概念。
通知(advice),就是按照约定的流程下的方法,分为前置通知、后置通知、环绕通知、事后返回通知和异常通知,它会根据约定织入流程中。

spring AOP的术语:

1、Aspect:切面,由一系列切点、增强和引入组成的模块对象,可定义优先级,从而影响增强和引入的执行顺序。事务管理(Transaction management)在java企业应用中就是一个很好的切面样例。所以他不是一个被代理的对象。
2、Join point:接入点,程序执行期的一个点,例如方法执行、类初始化、异常处理。 在Spring AOP中,接入点始终表示方法执行。
3、Advice:增强,切面在特定接入点的执行动作,包括 “around,” “before” and "after"等多种类型。包含Spring在内的许多AOP框架,通常会使用拦截器来实现增强,围绕着接入点维护着一个拦截器链。
4、Pointcut:切点,用来匹配特定接入点的谓词(表达式),增强将会与切点表达式产生关联,并运行在任何切点匹配到的接入点上。通过切点表达式匹配接入点是AOP的核心,Spring默认使用AspectJ的切点表达式。
5、Introduction:引入,为某个type声明额外的方法和字段。Spring AOP允许你引入任何接口以及它的默认实现到被增强对象上。
6、Target object:目标对象,被一个或多个切面增强的对象。也叫作被增强对象。既然Spring AOP使用运行时代理(runtime proxies),那么目标对象就总是代理对象。
7、AOP proxy:AOP代理,为了实现切面功能一个对象会被AOP框架创建出来。在Spring框架中AOP代理的默认方式是:有接口,就使用基于接口的JDK动态代理,否则使用基于类的CGLIB动态代理。但是我们可以通过设置proxy-target-class=“true”,完全使用CGLIB动态代理。
8、Weaving:织入,将一个或多个切面与类或对象链接在一起创建一个被增强对象。织入能发生在编译时 (compile time )(使用AspectJ编译器),加载时(load time),或运行时(runtime) 。Spring AOP默认就是运行时织入,可以通过枚举AdviceMode来设置。

下列选项中,属于Spring MVC的注解的有(   )
A
@RequestMapping
B
@RequestParam
C
@RequestBody
D
@PathVariable
正确答案:ABCD
官方解析:上述4个选项均是Spring MVC的注解。

关于Spring注解,下列说法正确的是(   )
A
@Autowired是Spring提供的注解。
B
@Autowired是JDK提供的注解。
C
@Resource是Spring提供的注解。
D
@Resource是JDK提供的注解。
正确答案:AD
@Autowired是Spring提供的注解,@Resource是JDK提供的注解。
它们的区别是,@Autowired只能按类型注入,@Resource默认按名称注入,也支持按类型注入。

.
SpringApplication调用的run方法作用包括(   )
A
获取监听器参数配置
B
打印Banner信息
C
创建并初始化容器
D
监听器发送通知
正确答案:ABCD
官方解析:SpringApplication调用的run方法执行流程图如下:
SpringApplication调用的run方法执行流程如下:

  1. 初始化监听器,以及添加到SpringApplication的自定义监听器。
  2. 发布ApplicationStartedEvent事件,如果想监听ApplicationStartedEvent事件,你可以这样定义:public class ApplicationStartedListener implements ApplicationListener,然后通过SpringApplication.addListener(…)添加进去即可。
  3. 装配参数和环境,确定是web环境还是非web环境。
  4. 装配完环境后,就触发ApplicationEnvironmentPreparedEvent事件。
  5. 如果SpringApplication的showBanner属性被设置为true,则打印启动的Banner。
  6. 创建ApplicationContext,会根据是否是web环境,来决定创建什么类型的ApplicationContext。
  7. 装配Context的环境变量,注册Initializers、beanNameGenerator等。
  8. 发布ApplicationPreparedEvent事件。
  9. 注册springApplicationArguments、springBootBanner,加载资源等
  10. 遍历调用所有SpringApplicationRunListener的contextLoaded()方法。
  11. 调用ApplicationContext的refresh()方法,装配context beanfactory等非常重要的核心组件。
  12. 查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们。
  13. 发布ApplicationReadyEvent事件,启动完毕,表示服务已经可以开始正常提供服务了。通常我们这里会监听这个事件来打印一些监控性质的日志,表示应用正常启动了。

下列关于Spring MVC注解的说法中,正确的是(   )
A
@ControllerAdvice用于定义控制器的通知类,它可以对指定的控制器进行增强。
B
@InitBinder用于定义控制器参数绑定规则,如转换规则,它会在参数转换之前执行。
C
@ExceptionHandler用于定义控制器发生异常后的操作。
D
@ModelAttribute用于定义控制器方法执行之前,对数据模型的操作。
正确答案:ABCD

Spring Boot包含如下哪些优点(      )
A
可以快速构建项目。
B
项目可独立运行,无需外部依赖Servlet容器。
C
提供运行时的应用监控。
D
可以极大地提高开发、部署效率。
正确答案:ABCD
官方解析:Spring Boot本身并不提供Spring的核心功能,而是作为Spring框架的脚手架框架,以达到快速构建项目,预置第三方配置,开箱即用的目的。

下列注解中,可以用于管理Spring Bean的生命周期的注解是(   )
A
@Controller
B
@Service
C
@PostContruct
D
@Repository
正确答案:C
可以管理Spring Bean的生命周期的注解有:@PostContruct、@PreDestroy。
@PostContruct是给Bean初始化,@PreDestroy是销毁,这俩控制Bean生命周期

下列选项中,不属于Spring Boot核心功能的是(   )
A
自动配置
B
起步依赖
C
端点监控
D
IoC和AOP
正确答案:D
官方解析:IoC和AOP是Spring的核心功能。
Spring Boot核心功能的是自动配置、起步依赖、端点监控。

下列关于Spring MVC视图的说法中,错误的是(   )
A
View是视图的顶层接口。
B
AbstractJackson2View不是逻辑视图,它不依赖ViewResolver的定位,直接将模型渲染为json。
C
AbstractUrlBasedView是逻辑视图,它依赖ViewResolver定位模板,然后将模型传入模板并渲染。
D
其他说法都不对
正确答案:D
官方解析:A、B、C选项的说法都是正确的。
View是视图的顶层接口。
AbstractJackson2View不是逻辑视图,它不依赖ViewResolver的定位,直接将模型渲染为json。
AbstractUrlBasedView是逻辑视图,它依赖ViewResolver定位模板,然后将模型传入模板并渲染

关于Spring MVC开发,下列说法错误的是(   )
A
在控制器的方法中,我们可以直接使用Request、Response对象处理请求与响应。
B
ModelAndView对象,既可以存储模型数据,又可以存储模板路径。
C
Model对象只能存放模型数据,它和ModelAndView一样,需要主动实例化。
D
Spring MVC的核心组件是DispatcherServlet,它负责分发所有的请求。
正确答案:C
官方解析:Model 对象可以被自动实例化。
在控制器的方法中,我们可以直接使用Request、Response对象处理请求与响应。
ModelAndView对象,既可以存储模型数据,又可以存储模板路径。
Spring MVC的核心组件是DispatcherServlet,它负责分发所有的请求。

Spring MVC注解:@RequestMapping(属性:method,value,params),
下列不属于Spring Boot注解的是(   )
A
@Controller mvc
B
@EnableAutoConfiguration
C
@Conditional
D
@SpringBootApplication
正确答案:A
官方解析:
@Controller是Spring MVC的注解。
Spring Boot注解:
@EnableAutoConfiguration 自动配置
@Conditional 条件装配
@SpringBootApplication 包括SpringBootConfiguration(实现配置文件),EnableAutoConfiguration(自动配置),ComponentScan(组件扫描)

下列选项中,属于Spring MVC的注解的有(   )
A
@RequestMapping
B
@RequestParam
C
@RequestBody
D
@PathVariable
Spring MVC的注解:RequestMapping,RequestParam,RequestBody,PathVariable

在BeanFactory定义方法中,哪个方法可以用于获取Bean的Class类型(   )
A
getType(String name)
B
getBean(String name)
C
containsBean(String name)
D
isSingleton(String name)
正确答案:A
官方解析:
getBean(String name)方法是从Spring容器中获取对应Bean对象的方法,如存在,则返回该对象
containsBean(String name)方法用于判断Spring容器中是否存在该对象。
isSingleton(String name)方法用于判断Bean对象是否为单例对象。
getType(String name)可以用于获取Bean的Class类型

下列类型中,不可以作为Spring MVC数据模型的是(   )
A
Model
B
ModelAttribute
C
ModelMap
D
ModelAndView
正确答案:B
官方解析:在Spring MVC中,Model、ModelMap、ModelAndView都可以作为数据模型对象,以上述类型作为控制器的方法参数时,Spring MVC会自动实例化这些类型。ModelAttribute是注解,用于定义控制器方法执行之前,对数据模型的操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值