• 关于spring面试题


    1.spring框架有哪些主要模块?

    • Spring Core,Spring的核心功能,用IOC容器,解决对象创建以及依赖关系,包含并管理应用对象的配置和生命周期
    • Spring DAO,Spring对jdbc的支持,可使用JdbcTemplate来简化数据操作
    • Spring ORM,Spring对ORM的支持,提供了对主流的对象映射关系框架的支持。提供了与多个第三方持久层框架的良好整合
    • Spring AOP,切面编程,减少了非业务代码的重复,降低了模块之间的耦合。比如:事务管理,日志,权限验证
    • Spring Web,Spring对Web模块的支持.
    • Spring JEE,Spring对JavaEE其他模块的支持。如EJB,JMS等

    2.spring框架用到了哪些设计模式?

    • 单例模式:在Spring配置bean时,一般默认为单例
    • 依赖注入模式:
    • 工厂模式:BeanFactory用来创建对象实例
    • 代理模式:Spring AOP
    • 前端控制器模式:Spring提供了DispatcherServlet对请求进行处理
    • 模板方式模式:减少代码重复性

    3.解释IOC(控制反转)、DI(依赖注入)

    IOC:把对象的创建、初始化、销毁交给spring来管理,而不是由程序控制,实现控制反转。

    DI:依赖注入,在Spring创建对象的过程中,将对象依赖属性通过配置进行注入

    DI可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现。

    注意:

    1.    使用构造器注入时,先实例化依赖的对象后,才实例化这个对象。而使用set方法时,Spring首先实例化对象,然后才实例化所有依赖的对象。

    2.   当设值注入与构造注入同时存在时,先执行设值注入,再执行构造注入。

    4.解释AOP(面向切面编程)

    http://www.cnblogs.com/mcahkf/p/9065833.html 

    5.BeanFactory和ApplicationContext有什么区别?

    • ApplicationContextBeanFactory的子接口。
    • BeanFactorySpring中最底层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能。而ApplicationContextSpring的一个更高级的容器,提供的额外的功能有:国际化的功能、消息发送、响应机制、统一加载资源的功能、强大的事件机制、对Web应用的支持等等。
    • 加载方式的区别:BeanFactory采用的是延迟加载的形式来注入Bean;而ApplicationContext是在Ioc启动时就一次性创建所有的Bean,好处是可以马上发现Spring配置文件中的错误,坏处是造成浪费。

    6.spring配置Bean的方式

    • 基于XML的配置
    • 基于注解的配置
    • 基于Java的配置

    6.Bean的作用域

    • singletonSpring IoC容器中只会存在一个共享的Bean实例Singleton作用域是Spring中的缺省作用域
    • prototype每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态
    • request对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。
    • session对不同的Session请求则会产生新的Bean,该bean实例仅在当前Session内有效。
    • global Session在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。

    7.Spring Bean的生命周期

    8.如何在Spring中注入一个Java Collection

    Spring提供了以下四种集合类的配置元素:

    • <list> :   该标签用来装配可重复的list值。
    • <set> :    该标签用来装配没有重复的set值。
    • <map>:   该标签可用来注入键和值可以为任何类型的键值对。
    • <props> : 该标签支持注入键和值都是字符串类型的键值对。

    8.Spring 事务传播属性以及隔离

    事务传播属性:

    •     PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
    •   PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
    •   PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
    •   PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
    •   PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    •     PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

    事务隔离级别:

    •   DEFAULT使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应
    •   READ_UNCOMMITTED这是事务最低的隔离级别,充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
    •     READ_COMMITTED保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
    •   REPEATABLE_READ这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)
    •   SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

     

     

  • 相关阅读:
    第3周 实践项目2 建设”顺序表“算法库(可参考为模板)
    第3周实践项目3 求集合并集
    【luogu 2529】【SHOI 2001】击鼓传花
    【BZOJ 3270】博物馆
    【BZOJ 2337】XOR和路径
    浅谈期望dp
    【codeforces 24D】Broken Robot
    【POJ 1463】Strategic game
    【POJ 3585】Accumulation Degree
    【luogu 3146/3147】248/262144
  • 原文地址:https://www.cnblogs.com/mcahkf/p/9228556.html
Copyright © 2020-2023  润新知