欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

spring 和 springMVC 面试问题

最编程 2024-05-01 11:31:07
...
  • 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
  1. 详细描述什么是Spring?

    Spring的核心是一个轻量级的容器,它是实现IoC容器和非入侵性的框架,并提供AOP概念的实现方式;提供对持久层、事物的支持;提供MVC Web框架的实现,并对一些常用的企业服务API提供一致的模型封装,是一个全方位的应用程序框架,除此之外,对现存的各种框架,Spring也提供了与他们相整合的方案。

  2. 什么是Spring IOC?

    ioc(inverse of control )控制反转:所谓控制反转就是把对象(bean)对象和维护对象(bean)之间的关系的权利转移到Sqring容器中去了(ApplicationContext.xml)而程序本身不在维护了

  3. 什么是Spring AOP?描述其应用场景

    AOP(Aspect-Oriented Programming),一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理等。

  4. AOP的通知有几个,分别是什么

    1. 前置通知(Before):在目标方法被调用之前调用通知功能;
    2. 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
    3. 返回通知(After-returning ):在目标方法成功执行之后调用通知;
    4. 异常通知(After-throwing):在目标方法抛出异常后调用通知;
    5. 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
  5. 描述Spring Bean的作用域?

    Spring框架支持以下五种bean的作用域:

    singleton : bean在每个Spring ioc容器中只有一个实例。

    prototype:一个bean的定义可以有多个实例。

    request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

    session:在一HTTP Session中,一个bean定义对应一个实例。

  6. Spring Bean 注入有几种方式?

    使用属性的setter方法注入 这是最常用的方式;

    使用构造器注入;

    工厂注入方式

  7. SpringBean 生命周期?

    1. Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化
    2. Bean实例化后对将Bean的引入和值注入到Bean的属性中
    3. 如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法
    4. 如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入
    5. 如果Bean实现了ApplicationContextAware接口的话,Spring将调用Bean的setApplicationContext()方法,将bean所在应用上下文引用传入进来。
    6. 如果Bean实现了BeanPostProcessor接口,Spring就将调用他们的postProcessBeforeInitialization()方法。
    7. 如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用
    8. 如果Bean 实现了BeanPostProcessor接口,Spring就将调用他们的postProcessAfterInitialization()方法。
    9. 此时,Bean已经准备就绪,可以被应用程序使用了。他们将一直驻留在应用上下文中,直到应用上下文被销毁。
    10. 如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。
  8. Spring框架中 用到了哪些设计模式?

    • 工厂设计模式 : Spring使用工厂模式通过 BeanFactoryApplicationContext 创建 bean 对象。
    • 代理设计模式 : Spring AOP 功能的实现。
    • 单例设计模式 : Spring 中的 Bean 默认都是单例的。
    • 模板方法模式 : Spring 中 jdbcTemplatehibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
    • 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
    • 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
    • 适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller
  9. 描述Spring事务传播行为?

    REQUIRED(常用):如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。

    SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

    MANDATORY:强制的 使用当前的事务,如果当前没有事务,就抛出异常。

    REQUIRES_NEW:需要JTA事务管理器的支持,新建事务,如果当前存在事务,把当前事务挂起。

    NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

    NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

    NESTED:嵌套 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

  10. 描述Spring事务的隔离级别?

int ISOLATION_DEFAULT = -1; 使用数据库默认的隔离级别
int ISOLATION_READ_UNCOMMITTED = 1;读未提交 
int ISOLATION_READ_COMMITTED = 2;读提交 
int ISOLATION_REPEATABLE_READ = 4;可重复读 
int ISOLATION_SERIALIZABLE = 8;串行化