Spring 常见面试题

1、Bean的生命周期

bean的生命周期

2、循环依赖的解决方式

1、实例化和初始化分开,提前暴露对象;
2、三级缓存,暂存半成品对象;
引用链接

3、BeanFactory和ApplicationContext的区别

1、BeanFactory是Spring比较原始的Factory,无法使用Spring的许多插件:如AOP、web应用等;
2、ApplicationContext接口由BeanFactory接口派生而来,在BeanFactory的基础上扩展了很多功能;
3、BeanFactory采用延迟加载(使用时加载),而ApplicationContext默认是启动时一次性加载;
引用链接

3、Spring中用到的设计模式

  • 工厂模式
    通过 BeanFactory 或 ApplicationContext 创建 bean 对象就使用的是工厂模式;
  • 单例模式
    Spring中bean的默认作用域就是singleton(单例)的;
    实现方式:通过ConcurrentHashMap单例注册表来保存所有的单例对象,key是bean的名称,value是对象引用;
  • 代理模式
    AOP都是采用动态代理实现,根据代理对象是否实现了接口来决定采用JDK Proxy还是Cglib来创建代理对象;


    image.png

    AOP将一些通用的功能抽象出来,简化代码,提高系统扩展性;

  • 模板方法
    模板模式:定义一个方法的实现骨架,将具体的实现放到子类中;使在不改变算法骨架的情况下,重定义某些特殊步骤的实现,也让公共代码得到复用;
    Spring中jdbcTemplate这样以Template结尾的数据库操作类都以模板方法来实现;
    一般情况下,我们都用继承的方式来实现模板模式,但Spring没有使用这种方式,而是采用CallBack+模板方法结合使用的方式,提供代码复用的效果,增加灵活性;
    引用链接
  • 观察者模式
    Spring中的事件驱动就使用到了观察者模式;
    事件体ApplicationEvent、事件监听者ApplicationListener、事件发布者ApplicationEventPublisher
    ContextStartedEvent:ApplicationContext 启动后触发的事件;
    ContextRefreshedEvent:ApplicationContext 初始化或刷新完成后触发的事件;
    ContextClosedEvent:ApplicationContext 关闭后触发的事件。

你可能感兴趣的:(Spring 常见面试题)