1. 详细描述什么是Spring?

    Spring 的核心是一个轻量级(Lightweight)的容器(Container)。

    Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架。

    Spring提供AOP(Aspect-oriented programming)概念的实现方式。

    Spring提供对持久层(Persistence)、事物(Transcation)的支持。

    Spring供MVC Web框架的实现,并对一些常用的企业服务API(Application Interface)提供一致的模型封装。

    Spring提供了对现存的各种框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案。

  2. 什么是Spring IOC?

    SpringIOC 负责创建对象,管理对象(通过依赖注入),装配对象,配置对象,并且管理这些对象的整个生命周期

    控制反转(Inversion of Control,缩写为IoC):组件以一些预定好的方式接收来自容器的资源注入。

    依赖注入: 在应用程序中的组件需要获取资源时,传统的方式是组件主动去创建需要的资源;反转控制的思想完全颠覆了应用程序组件获取资源的方式,反转了资源的获取方向,改由容器创建,并主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可。

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

    AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。

    它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

    应用场景: 权限认证、通知、日志、事务处理

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

    @Before:前置通知,在调用目标方法之前执行通知定义的任务

    @After:后置通知,在目标方法执行结束后,无论执行结果如何都执行通知定义的任务

    @After-returning:在目标方法返回后执行,执行成功之后

    @After-throwing:异常通知,如果目标方法执行过程中抛出异常,则执行通知定义的任务

    @Around:环绕通知,在目标方法执行前和执行后,都需要执行通知定义的任务。

  5. 描述Spring Bean的作用域?

    singleton : 在IOC容器中只存在一个bean实例。bean以单例方式存在

    prototype: 每次从容器中调用bean时都返回一个新的实例

    request: 每次http请求都会创建一个新的bean

    session:同一个session共享一个bean,不同的session使用不同的bean

    global-session: 一般用于Protlet

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

    • set方法注入
    • 构造器注入
    • 静态工厂注入
    • 实例工厂注入
  7. SpringBean 生命周期?

    1. 实例化BEAN Instantiation(默认)
    2. 设置属性赋值 Populate(默认)
    3. 前置处理器(开发人员自定义方法)
    4. 初始化 Initialization (init (开发人员自定义方法))
    5. 后置处理器(开发人员自定义方法)
    6. 使用BEAN(默认)
    7. destory(开发人员自定义方法)
    8. 销毁BEAN Destruction(默认)
  8. Spring框架中 用到了哪些设计模式?(不低于3个)

    1.工厂设计模式 : Spring使用工厂模式通过 BeanFactory、 ApplicationContext 创建 bean 对象。

    2.代理设计模式 : Spring AOP 功能的实现。

    3.单例设计模式 : Spring 中的 Bean 默认都是单例的。

    4.模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。

    5.包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。

    6.观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。

    7.适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。

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

    PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

    ② PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘

    ③ PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

    PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。

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

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

    ⑦ PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行

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

    默认级别: 默认和数据库保持一样的隔离级别。

    1.读未提交:READ_UNCOMMITTED:就是一个事务可以读取另一个未提交事务的数据。

    2.读已提交:READ_COMMITTED:就是一个事务要等另一个事务提交后才能读取数据,可以避免脏读。

    3.重复读:REPEATABLE_READ:就是在开始读取数据(事务开启)时,不再允许修改操作,可以避免脏读,不可重复读。

    4.串行化:SERIALIZABLE:最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

  11. Spring事务传播行为 REQUIRED和REQUIRED_NEW区别

    REQUIRES:当前方法被另一个事务方法调用时合并成一个事务;

    REQUIRES_NEW:当前方法必须启动一个新事务并在自己的事务内运行,若有事务在运行则将它挂起