当前位置: 首页 > article >正文

spring基础题笔记(1)

已知项目中定义了如下Controller:
@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

答案解析:Controller中方法的访问路径是“类的访问路径+方法的访问路径”,而getOTP()方法的访问路径有两级,其中第二级是代表手机号的字符串

Springboot三层架构--DAO层、Service层、Colltroler层--这波我在外太空-CSDN博客


下列选项中,哪一项不是Spring AOP支持的通知类型(   )
A.前置通知
B.后置通知
C.织入通知
D.异常通知

答案解析:Spring AOP支持的通知类型包括前置通知、后置通知、环绕通知、返回通知、异常通知。

SpringAOP(图文详解)_spring aop-CSDN博客


在BeanFactory定义方法中,哪个方法可以用于获取Bean的Class类型(   )
A.getType(String name)
B.getBean(String name)
C.containsBean(String name)
D.isSingleton(String name)

答案解析:getBean(String name)方法是从Spring容器中获取对应Bean对象的方法,如存在,则返回该对象。containsBean(String name)方法用于判断Spring容器中是否存在该对象。isSingleton(String name)方法用于判断Bean对象是否为单例对象。

Spring之BeanFactory详解-CSDN博客


有关MVC的处理过程,描述不正确的是(   )
A.首先控制器接收用户的请求,决定调用哪个模型来进行处理。
B.模型处理用户的请求并返回数据。
C.模型确定调用哪个视图进行数据展示。
D.视图将模型返回的数据呈现给用户。

答案解析:MVC的处理过程,首先控制器接受用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。


关于Spring MVC拦截器,下列说法错误的是(   )
A.开发Spring MVC拦截器,需实现WebMvcConfigurer接口。
B.preHandle方法在Controller之前执行,若返回false,则终止执行后续的请求。
C.postHandle方法在Controller之后、模板之前执行。
D.afterCompletion方法在模板之后执行。

答案解析:拦截器是SpringMVC中的一个核心应用组件,主要用于处理多个 Controller的共性问题.当我们的请求由DispatcherServlet派发 到具体Controller之前首先要执行拦截器中一些相关方法,在这些 方法中可以对请求进行相应预处理(例如权限检测,参数验证),这些方法可以决定对这个请求进行拦截还是放行.  

>>服务器一启动,就会创建拦截器对象, >>对拦截器配置延迟加载是没有用的 >>拦截器是单例的,整个过程,拦截器只有一个实例对象 拦截器需要实现 HandleInterceptor接口,或者继承HandlerInterceptorAdaptor抽象类;

HandlerInterceptor接口的三个方法:

1,preHandle() 是拦截器最先执行的方法,是在请求到达Controller之前执行的,其实就是拦截器用于拦截请求的,三个参数,分别是request,response,handelr就是这个请求要去找的后端处理器Controller.方法的返回值是bloolean类型,如果返回为false,就说明请求在此终结,不能执行后面的代码了.如果返回值为true,那么这个拦截器就要放行,将请求交给后端处理器Controller.

2,postHandle() 这个方法,是在后端控制器controller处理完请求之后,就执行的,这个方法,多了一个参数,ModelAndView,后端控制器controller处理请求可能需要返回页面和数据,所以会多一个ModelAndView,但是这个方法,是在渲染页面之前执行的,渲染热面是交个前端控制器来完成的.

3,afterCompletion() 拦截器最后执行的方法

Spring MVC详解(学习总结)_springmvc技能经验描述-CSDN博客


下列关于Spring MVC注解的描述中,错误的是(   )
A.@RequestMapping可以声明类或方法的访问路径,还可以声明请求的方式。
B.@PathVariable可以将请求路径中的参数,绑定到控制器中方法的参数。
C.@RequestParam可以将请求对象中的参数,绑定到控制器中方法的参数。
D.@ResponseBody用于向浏览器响应字符串,它只能应用于异步请求之中。

答案解析:

  • @RequestMapping注解确实可以声明类或方法的访问路径,并且可以指定请求的方式(如GET、POST等),所以A是正确的。
  • @PathVariable注解用于将URL中的占位符参数绑定到Controller的方法参数上,所以B是正确的。
  • @RequestParam注解用于将请求参数(通常来自查询字符串或表单数据)绑定到Controller的方法参数上,所以C是正确的。
  • @ResponseBody注解用于告诉Spring MVC框架,该方法的返回值应该直接作为HTTP响应的正文返回给客户端,而不是返回一个视图。它并不仅限于异步请求,而是用于同步和异步请求中,只要需要将方法的返回值直接写入HTTP响应体中。因此,D描述错误,@ResponseBody可以用于任何类型的请求中,不仅仅是异步请求。

深入解析Spring MVC注解:@PathVariable、@ResponseBody和@RequestParam的用法和区别_pathvariable responsebody-CSDN博客


下列类型中,不可以作为Spring MVC数据模型的是(   )
A.Model
B.ModelAttribute
C.ModelMap
D.ModelAndView

 答案解析:

  1. ModelAndView

    当Controller的方法返回值类型为ModelAndView时,可以在方法体内通过这个对象添加模型数据,并且指定视图名称。
  2. Map及Model

    如果Controller的方法参数是org.springframework.ui.Modelorg.springframework.ui.ModelMap或者java.util.Map类型,那么在方法执行完毕后,这些Map中的数据会自动添加到模型中。
  3. @SessionAttributes

    @SessionAttributes注解用于将模型中的某个属性暂存到HttpSession中,以便在多个请求之间共享这个属性。这通常用于表单数据的跨请求持久化。
  4. @ModelAttribute

    @ModelAttribute注解可以用于方法的参数,这样标记的参数对象会自动添加到数据模型中。这通常用于将表单数据绑定到Controller的方法参数上。

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

答案解析:Model 对象可以被自动实例化。


关于BeanFactory和FactoryBean,下列说法正确的是(   )
A.BeanFactory是所有Spring Bean的容器根接口。
B.BeanFactory是一种创建Bean的方式。
C.FactoryBean是所有Spring Bean的容器根接口。
D.FactoryBean是一种创建Bean的方式。

答案解析:

 BeanFactory以Factory结尾,表示它是⼀个⼯⼚类(接⼝),⽤于管理Bean的⼀个⼯⼚。在Spring中,BeanFactory是 IOC容器的核⼼接⼝,它的职责包括:实例化、定位、配置应⽤程序中的对象及建⽴这些对象间的依赖。 
 FactoryBean以Bean结尾,表示它是⼀个Bean,不同于普通Bean的是:它是实现了FactoryBean接⼝的Bean,根据该 Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,⽽不是FactoryBean本身,如果要获 取FactoryBean对象,请在id前⾯加⼀个&符号来获取。


关于IoC注解,下面说法错误的是(   )
A.@Autowired用于注入Bean,该注解只能写在成员变量的前面。
B.@Qualifier用于声明Bean的名称,该注解只能引用Bean的自定义名称。
C.@Bean用于装配第三方的Bean,它不能装配自定义的Bean。
D.@Configuration用于声明配置类,该注解是基于@Component实现的。

答案解析:@AutoWired注解还可以写在set方法、构造器上;@Qualifier注解也可以引用默认名称;@Bean注解可以用于装配任何Bean。

Java注解之@Autowired,一文掌握@Autowired注解知识(1)-CSDN博客

spring中@Qualifier注解的使用-CSDN博客

@Bean注解详解-CSDN博客


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

答案解析:

@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="")

深入理解@RequestParam注解:Spring MVC参数绑定的利器-CSDN博客

@RequestMapping详解-CSDN博客


@RequestMapping注解的属性不包括以下哪个(   )
A.method
B.value
C.required
D.params

答案解析:method属性代表指定请求的method的类型,value属性指请求的实际地址,params是指定request中一定要有的参数值。required是@RequestParam注解的属性,是指该参数是否为必传项,默认为true,表示请求中一定要传入对应的参数。


下列关于Spring AOP的实现方式的说法中,正确的是(   )
A.JDK动态代理,是Java提供的动态代理技术,可以在运行时创建接口的代理实例。
B.JDK动态代理,是Java提供的动态代理技术,可以在运行时创建子类的代理实例。
C.CGLib动态代理,采用底层的字节码技术,在运行时创建接口代理的实例。
D.CGLib动态代理,采用底层的字节码技术,在运行时创建子类代理的实例。

答案解析:

静态代理:也就是自己手动创建的代理对象

动态代理:也就是在程序运行中通过配置参生的

那么Spring的AOP也就是面向切面编程,就是基于动态代理来实现的,通过代理原始类增加额外功能,我们可以将额外功能一次定义然后配合切点达到多次使用的效果,比如 做日志 事物 时间等…提高了复用性 开发效率.

在Spirng当中动态代理有两种

第一种也就是JDK自带的动态代理

1.JDK动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理.需要指定一个类加载器,然后生成的代理对象实现类的接口或类的类型,接着处理额外功能.JDK是基于接口

第二种也就是Cglib的动态代理

2.Cglib是动态代理利用asm的开源包,对代理对象的Class文件加载进来,通过修改其字节码生成的子类来处理

Cglib是基于继承父类生成的代理类.

在Spirng当中动态代理的使用

1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理来实现AOP

2.如果目标对象实现了接口,也可以强制使用CGlib来实现AOP

3.如果目标对象没有实现接口,必须采用Cglib库,Spirng会自动在JDK和CGlib用切换

如何强制使用CGlib来实现AOP?

1.添加CGlibjar包:SPRING_HOME/cglib/*.jar

2.在Spring的配置文件中加入 //默认是false 也就是用JDK的 改为true就是用Cglib的

JDK和动态代理和CGlib字节码的生成区别?

1.JDK动态代理制能对实现了接口的类生成代理,而不是针对类

2.CGLIB是针对类实现代理,主要对指定的类生成一个子类,覆盖其中的方法,添加额外功能,因为是继承,所以该类方法不能用final来声明.


在使用@Autowired注解时,如果一个类可以有多种类型,就会对Spring IoC 容器注入造成困扰,这种情况我们称之为歧义性,为解决这一问题,我们可以使用(   )注解。
A.@Component
B.@Primary
C.@Resource
D.@Qualifier

@Autowired
注入声明的SpringBean对象,根据一定的规则首先按照注入的类型去查找,如果没有找到安装注入的名称去匹配你要注入的属性名称,如果都没有找到启动项目时抛出异常,@Autowired(required = false) 表示没有找到注入对象时,不抛异常,注入null。


@Primary
如果有多个相同类型的SpringBean,我们可以使用@Primary注解,优先注入带该注解标识的类,@Primary可以在多个类上标注,那就会抛异常。

@Quelifier
使用SpringBean的名称(SpringBean的名称都是唯一的)进行注入。

@Primary-在spring中常被忽视的注解-CSDN博客


以下关于@Autowired注解说法正确的是(   )
A.@Autowired是Spring提供的注解。
B.@Autowired是JDK提供的注解。
C.@Autowired注解只能根据类型注入Bean。
D.@Autowired注解既可以根据类型注入Bean也可以根据名称注入Bean。

答案解析:@Autowired 不是JDK提供的注解,而是Spring框架提供的。@Autowired 注解默认情况下是按照类型(byType)进行注入的,但是它也支持按照名称(byName)注入。

  1. @Autowired 的默认行为

    • @Autowired 注解默认情况下是按照类型(byType)进行自动装配的。如果容器中存在多个相同类型的Bean,Spring将无法决定注入哪一个,除非使用@Qualifier注解指定Bean的名称,或者只有一个Bean被标记为@Primary
  2. @Autowired 的装配模型

    • @Autowired 并没有AUTOWIRE_NOAUTOWIRE_BY_NAMEAUTOWIRE_BY_TYPEAUTOWIRE_CONSTRUCTOR这些枚举值。这些值实际上是@Autowired注解的required属性的配置选项,用于控制是否需要自动装配以及如何装配:
      • required=true(默认):如果找不到匹配的Bean,则抛出异常。
      • required=false:如果找不到匹配的Bean,则注入null
    • @Autowired注解本身并不直接支持byName装配,这是通过@Qualifier注解来实现的。
  3. @Resource 注解

    • @Resource 注解确实是由JDK提供的,用于依赖注入。它默认按照byName进行自动装配,但也可以通过name属性指定Bean的名称,或者通过type属性指定Bean的类型。
    • @Resource可以与@Primary注解一起使用,以解决多个Bean匹配的情况。
  4. @Autowired 和 @Resource 的区别

    • @Autowired是Spring提供的注解,而@Resource是JDK提供的注解。
    • @Autowired默认按类型装配,而@Resource默认按名称装配。
    • @Autowired可以与@Qualifier注解一起使用来指定Bean的名称,而@Resource可以通过name属性直接指定Bean的名称。

菜鸟的springboot常用注解总结-CSDN博客


http://www.kler.cn/a/398500.html

相关文章:

  • HDMI之SBTM
  • Python酷库之旅-第三方库Pandas(221)
  • mqtt学习笔记(一)
  • 浪浪云轻量服务器搭建vulfocus网络安全靶场
  • 【机器学习导引】ch6-支持向量机
  • vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验一(下)----空间数据的编辑与处理(超超超详细!!!)
  • 如何在 Ubuntu 上安装 RStudio IDE(R语言集成开发环境) ?
  • K8S创建云主机配置docker仓库
  • Spring Boot项目pom.xml文件详解
  • css初始化(二十三课)
  • Python3.11.9+selenium,选择证书用多线程+键盘enter解决
  • VuePress v2 快速搭建属于自己的个人博客网站
  • 华为开源自研AI框架昇思MindSpore应用案例:人体关键点检测模型Lite-HRNet
  • 卷积神经网络(CNN)对 CIFAR-10 数据集进行图像分类
  • C++中的适配器模式
  • Prometheus面试内容整理-Prometheus 的架构和工作原理
  • 【第五课】Rust所有权系统(一)
  • React教程第二节之虚拟DOM与Diffing算法理解
  • 【网络】什么是路由器 (Router )网关设备(Gateway)?
  • 【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
  • 【java】链表:遍历一遍找到mid node
  • Spring Boot框架在电商领域的应用
  • 蓝队基础1 -- 企业信息架构与安全基础
  • 【SQL】mysql常用命令
  • 游戏引擎学习第16天