spring相关注解面试题

327 阅读3分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」。

1. SpringMVC中的Bean是线程安全的吗? 说出你的解决方案?

spring容器中bean默认为单例模式,在多线程中操作bean会产生线程安全问题。

方案一:改变bean的作用域

方案二:使用ThreadLocal存储不安全的变量

方案三:使用线程同步,synchronized

方案四:尽量不使用成员变量

2. SpringMVC的执行流程?

1). 一个请求匹配前端控制器 DispatcherServlet 的请求映射路径(在 web.xml中指定), WEB 容器将该请求转交给 DispatcherServlet 处理

2). DispatcherServlet 接收到请求后, 将根据 请求信息 交给 处理器映射器 (HandlerMapping)

3). HandlerMapping 根据用户的url请求 查找匹配该url的 Handler,并返回一个执行链

4). DispatcherServlet 再请求处理器适配器(HandlerAdapter) 调用相应的 Handler 进行处理并返回ModelAndView 给 DispatcherServlet

5). DispatcherServlet 将 ModelAndView 请求 ViewReslover(视图解析器)解析,返回具体 View

6). DispatcherServlet 对 View 进行渲染视图(即将模型数据填充至视图中)

7). DispatcherServlet 将页面响应给用户

3. @RequestMapping注解作用

用于处理请求地址映射的注解,可以加在类或方法上,加在类上作为父路径

4. @Transactional注解作用

开始事务的注解,可以加在方法或类上。

加在方法上表示给这个方法添加事务,加在类上表示给这个类的所有方法添加事务,出现异常后默认自动回滚。

5. @Configuration注解作用

声明这是一个配置类,相当于XML中的标签

6. 描述 @ControllerAdvice @ExceptionHandler注解作用

作用:统一异常处理

Spring 3.2之后加入了新的@ControllerAdvice注解,可以支持全局的异常处理。 需要配合@ExceptionHandler使用。

单独使用@ExceptionHandler时一般写在控制器的内部,在控制器的某个方法上加上@ExceptionHandler注解。

注:@ControllerAdvice是放在一个类上面做注解,返回string或json需要@ResponseBody,用RestControllerAdvice,就不需要加@ResponseBody。

7. @RequestBody 和@ResponseBody的区别

@RequestBody的作用是将前端传来的json格式的数据转为自己定义好的javabean对象

@ResponseBody的作用是将后端以return返回的javabean类型数据转为json类型数据

8. @RequestParam和@PathVariable的区别

@RequestParam用于取request中的值

@PathVariable用于取url地址中的值

9. @Resource和 @Autowired/ @Qualifier的区别

@Resource先根据名字注入,其次根据对象类型注入

@Autowired根据对象类型注入

@Qualifier根据对象名称注入

10.@Controller, @Service, @Repository,@Component作用

@Controller用于标注控制层组件

@Service用于标注业务层组件

@Repository用于标注数据访问层组件(DAO层)

@Component用于标注不好分类的组件

11. AOP的常用注解

@Aspect:把当前类声明为切面类。

@Before:把当前方法看成是前置通知。value:用于指定切入点表达式,还可以指定切入点表达式的引用。

@After:把当前方法看成是最终通知。value属性同上。

@AfterReturnning:把当前方法看成是后置通知。value属性同上。

@AfterThrowing:把当前方法看成是异常通知。value属性同上。

@Around:把当前方法看成是环绕通知:可以控制返回对象

@Pointcut:指定切入点表达式.alue:指定表达式的内容