晨考题 Spring

1、晨考题 Spring

  1. 详细描述什么是Spring?

    Spring是一个轻量级开发框架,其目的主要是解决企业级应用开发过程中业务逻辑层与其他层的耦合问题,Spring的主要使命就是解决开发企业级应用开发过程中的复杂性,即简化Java开发。

    Spring的两个核心,IOC和AOP。

  2. 什么是Spring IOC?

    Spring IOC就是控制反转,Spring容器负责对象的创建、管理(通过依赖注入 DI)、装配以及负责管理这些对象的生命周期。

    控制反转就是将组件对象的控制权进行转移,由程序代码本生转移到外部容器。

  3. 什么是Spring AOP?描述其应用场景(最少2个)

    • AOP:一般称为面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”,减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。
    • 可用于权限验证、日志、事务管理、懒加载、debug。
  4. AOP的通知有几个,分别是什么

    前置通知(Before Advice):在一个连接点之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出异常)

    后置通知(After Advice):在目标方法执行后(无论是否出现异常)执行的通知

    返回后通知(After returning advice):在一个连接点正常完成后执行的通知。例如:一个方法正常返回,没有抛出任何异常。

    抛出后通知(After throwing advice):在一个方法抛出异常时执行的通知。

    环绕通知(Around advice):包围一个连接点的通知,就像方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回他们自己的返回值域或抛出异常来结束执行。

  5. 描述Spring Bean的作用域?

    • singleton : bean 在每个 Spring IoC 容器中只有一个实例。
    • prototype:一个 bean 的定义可以有多个实例。
    • request:每次 HTTP 请求都会创建一个 bean。
    • session:在一个 HTTP Session 中,一个 bean 定义对应一个实例。
    • global-session:在一个全局的 HTTP Session 中,一个 bean 定义对应一个实例。
    • request,session,global-session 作用域仅在基于 web 的 Spring ApplicationContext 情形下有效。
  6. Spring Bean 注入有几种方式?

    • Setter 注入
    • 构造器注入
    • FactoryBean注入
  7. SpringBean 生命周期?

    bean的实例化

    (前置处理器)

    init()初始化方法

    (后置处理器)

    SET注入属性赋值

    使用目标方法

    destory()方法

  8. Spring框架中 用到了哪些设计模式?(不低于3个)

    工厂模式 BeanFactory用来创建对象的实例

    单例模式 在spring配置文件中定义bean的时候默认是单例模式

    代理模式 在aop中使用很多

    模板方法 用来解决重复性代码

    前端控制器 Spring提供了DispatcherSerclet来对请求进行分发处理

    视图帮助 spring提供了一系列的jsp标签

    依赖注入 他是贯穿于BeanFactory/ApplicatiopnConetext接口的核心理念

  9. 描述Spring事务传播行为?

    PROPAGATION_REQUIRED -> 支持当前事务如果不存在就重新创建一个
    PROPAGATION_SUPPORTS -> 支持当前事务,如果不存在就不使用事务
    PROPAGATION_MANDATORY -> 支持当前事务,如果不存在就抛出异常
    PROPAGATION_REQUIRES_NEW -> 如果有事务存在,就挂起当前事务,创建一个新事务
    PROPAGATION_NOT_SUPPORTED -> 以非事务方式运行,如果有事务存在就挂起当前事务
    PROPAGATION_NEVER -> 以非事务方式运行,如果有事务就抛出异常
    PROPAGATION_NESTED -> 如果当前事务存在就嵌套事务运行

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

    1. 读已提交-> READ_COMMITTED -> 可避免脏读的发生
    2. 读未提交-> READ_UNCOMMITTED -> 最低级别,任何情况都无法保证
    3. 可重复读-> REPEATABLE_READ -> 可避免脏读、不可重复读的发生
    4. 串行化-> SERIALIZABLE -> 可避免脏读、不可重复读、幻读的发生
  11. Spring事务传播行为 REQUIRED和REQUIRES_NEW区别

    REQUIRED:当前方法被另一个事务方法 调用时,将会合并成一个事务

    REQUIRED_NEW:它表示该方法必须启动一个新事务, 并在自己的事务内运行. 如果有事务在运行, 就应该先挂起它.

    事务的传播机制较为常用的为:required,required-new,support。讨论结果为 required-new 跟 required 相比,使用应较为谨慎,原因:同一事务粒度更细更可控,同时也能避免 嵌套事务 可能导致的复杂情况,当然,具体情况需要根据具体业务来定,比如本次讨论中的项目,由于每一次操作的对象都要及时被可能存在.2的另一进程知悉,这种情况下需要 required-new 来实时开启事务告之其他进程; 1

posted @ 2020-12-23 18:46  左岸小镇_梦归  阅读(122)  评论(0)    收藏  举报