软件开发----Spring基础每日刷题(转载于牛客)

1.        关于Spring容器,下面说法错误的是(   )

A        Spring容器也叫IoC容器,本质上就是一个工厂。

B        Spring容器不但可以管理Bean,还能管理Bean的生命周期、作用域。

       一个Web应用中,通常只有一个Spring容器,该容器需要我们主动创建。

D        Spring容器的顶层接口是BeanFactory,而常用的是其子接口ApplicationContext。

正确答案:C

解析:

在Web应用中,服务器启动过程中会自动创建Spring容器。

一个类实现ApplicationContextAware接口,重写setApplicationContext方法就可以获取到ApplicationContext对象。

一个应用程序中可以有多个spring容器 不同容器里的bean可以同名 ,但scope=application的时候,同名的bean只有一个。


2.        下列关于@Bean注解的说法中,错误的是(   )

A        @Bean注解作用在方法上,表示该方法的返回值将被装配到容器中。

B        @Bean注解包含name属性,可以通过该属性指定装配的Bean的名称。

       @Bean注解依赖于@Configuration注解,即它所在的类必须带有@Configuration注解。

D        @Bean注解可以装配任意的Bean,尤其适合装配那些初始化过程十分复杂的Bean。

正确答案:C

解析:

首先说一下结论:只要当前类会被容器解析为beanDefinition(或者可以简单理解为bean),那么他内部的@Bean等注解就会生效。

其次,针对“@Bean只在配置类中生效”这一看法,判断当前类是不是“配置类”,首先第一优先的肯定是@Configuration注解,但是还有很多的备选方案:

甚至是内部的方法上是否存在@Bean注解:

能满足上述条件之一的都会被容器视为“配置类”(因为这一块儿的代码是位于ConfigurationClassxxx.java中的,所以...)。

当确定这个类是配置类之后,下一步就会开始解析这个类,而这一步其实就和@Configuration注解没有多大的关系了,会直接找当前类中的@Bean修饰的方法:

但是请注意,这三步都需要当前类能在项目启动的时候,会被容器扫描到,能注册为bean才可以!!!

最后,@Service注解能生效是因为它的元注解是@Component,而且上述代码中针对注解的扫描,是针对的元注解:


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

A        @RequestParam

       @RequestMapping

C        @ResponseBody

D        @PathVariable

正确答案:D

解析:用于从URL中提取参数的注解是@PathVariable。


4.        @RequestMapping注解的属性不包括以下哪个(   )

A        method

B        value

C        required

       params

正确答案:C

解析:

method属性代表指定请求的method的类型

value属性指请求的实际地址

params是指定request中一定要有的参数值

required是@RequestParam注解的属性,是指该参数是否为必传项,默认为true,表示请求中一定要传入对应的参数


5.        下列关于Spring MVC注解的说法中,正确的是(   )

A        @ControllerAdvice用于定义控制器的通知类,它可以对指定的控制器进行增强。

B        @InitBinder用于定义控制器参数绑定规则,如转换规则,它会在参数转换之前执行。

C        @ExceptionHandler用于定义控制器发生异常后的操作。

D        @ModelAttribute用于定义控制器方法执行之前,对数据模型的操作。

正确答案:ABCD


6.        SpringBoot注解中,主要功能是启动Spring应用程序上下文时进行自动配置的注解是(   )

       @SpringBootApplication

B        @Import

       @EnableAutoConfiguration

       @Conditional

正确答案:C

解析:

@EnableAutoConfiguration的主要功能是启动Spring应用程序上下文时进行自动配置,它会尝试猜测并配置项目可能需要的Bean。自动配置通常是基于项目classpath中引入的类和已定义的Bean来实现的,在此过程中,被自动配置的组件来自项目自身和项目依赖的jar包中.


7.        下列选项中,哪个不是Spring MVC拦截器的方法(   )

       preHandle()

       postHandle()

C        afterHandle()

D        afterCompletion()

正确答案:C

解析:

   1.preHandle:处理器执行之前执行,如果返回 false 将跳过处理器、拦截器 postHandle 方法、视图渲染等,直接执行拦截器 afterCompletion 方法。

    2.postHandle:处理器执行后,视图渲染前执行,如果处理器抛出异常,将跳过该方法直接执行拦截器 afterCompletion方法。

    3.afterCompletion:视图渲染后执行,不管处理器是否抛出异常,该方法都将执行


8.        下列不属于Spring Boot注解的是(   )

       @Controller

       @EnableAutoConfiguration

C        @Conditional

D        @SpringBootApplication

正确答案:A

解析:

@Controller是Spring MVC的注解。


9.        SpringApplication调用的run方法作用包括(   )

A        获取监听器参数配置

       打印Banner信息

C        创建并初始化容器

D        监听器发送通知

正确答案:ABCD

解析:

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事件,启动完毕,表示服务已经可以开始正常提供服务了。通常我们这里会监听这个事件来打印一些监控性质的日志,表示应用正常启动了


10.        以下关于@Autowired注解说法正确的是(   )

       @Autowired是Spring提供的注解。

       @Autowired是JDK提供的注解。

C        @Autowired注解只能根据类型注入Bean。

       @Autowired注解既可以根据类型注入Bean也可以根据名称注入Bean。

正确答案:AC

解析:

Resource默认按 byName自动注入罢了。

@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Autowired,Autowired同样实现了bean注入功能。只不过他是默认按照byType进行装配,如果匹配类型是多个直接抛出异常、当然这个问题是可以解决的那就是@Qualifier注解进行匹配

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值