Spring常见面试题

1.声明spring-bean的注解有哪些?

作用于对象的注解:

  • @Repository:对应持久层,即DAO层,主要用于数据库相关操作;
  • @Service:对应服务层,即Service层,主要涉及一些程序具体的复杂逻辑。
  • @Controller:对应Spring MVC的控制层,即Controller层,主要用于接受用户请求并调用Service层的方法返回数据给前端页面;
  • @Component:通用的bean注解,可标注任意类。当不知道一个bean应该被划分为那一层时,可以使用该注解;

作用于方法的注解:

  • @Bean:目的与@Repository类似,方法将返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。当我们引用第三方库中的类需要装配到Spring容器时,只能通过@Bean来实现

2.Ioc容器的加载流程

https://blog.csdn.net/Azhuzhu_chaste/article/details/139582805

3.Bean的生命周期

  1. Bean容器找到配置文件中Spring Bean的定义。
  2. Bean容器利用Java Reflection API创建一个Bean的实例。
  3. 如果涉及到一些属性值,利用set()方法设置一些属性值。
  4. 如果实现了xxAware接口,则调用对应方法,主要有以下三个:
    1. 如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。
    2. 如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。
    3. 如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例。
  5. 如果存在与该Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法。
  6. 如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。
  7. 如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。
  8. 如果存在与该Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法。
  9. 当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法。
  10. 当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。

4.Bean的作用域

作用域分为五个,其中request、session、global-session可以看出来只能在web应用中:

  • singleton:单例bean,未指定作用域时默认单例;
  • prototype:每次从容器中获取Bean时,都会新建一个Bean;
  • request:每次HTTP请求都会产生一个新的bean,该bean仅在当前request内有效;
  • session:每个HTTP session共享一个bean;
  • global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义。Portlet是能够生成语义代码(例如HTML)片段的小型Java Web插件。它们基于Portlet容器,可以像Servlet一样处理HTTP请求。但是与Servlet不同,每个Portlet都有不同的会话。

5.Spring的一些常用类

待完善

6.Spring中用到的一些设计模式

  • 工厂模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象;
  • 代理模式:Spring AOP功能的实现;
  • 单例模式:Spring中的bean默认都是单例的;
  • 模板模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类;
  • 装饰器模式:项目多数据源的情况的下,可以通过该模式去动态切换数据源;
  • 观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用;
  • 适配器模式:Spring AOP的增强或通知(Advice)、Spring MVC中的Controller。

7.SpringMVC中,DispatchServlet是怎么工作的

  1. 请求发送到DispatcherServlet
  2. 通过HandleMapping,解析获取到请求对应的Handler
  3. HandlerAdapter适配器,根据Handler调用真正的处理器处理请求,并开始真正业务逻辑
  4. 上一步处理完后返回一个ViewAndModel对象,Model是返回的数据对象,View是个逻辑上的View
  5. ViewResolver会根据逻辑View查找实际的View
  6. 将Model传给实际的View,然后将View返回给请求者

8.Spring的单例Bean线程安全问题

spring注册的单例bean是无状态的,也就没有线程安全问题,但如果其中定义了成员变量,那么就需要考虑成员变量修改的线程安全问题。
一般单例bean都不建议定义成员变量。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值