• 去阿里面试,被一道 Spring 面试题难倒了


     

    很显然,黑猫同学还是挂了。还是老老实实的恶补基础吧。

    一、关于Spring

    Spring是一个分层的Java SE/EE应用一站式的 轻量级开源框架 。

    Spring主要优点包括:

    • 方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。
    • AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。
    • 声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
    • 方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作。
    • 方便集成各种优秀框架,Spring提供了对各种优秀框架的直接支持。

    Spring核心是 IOC 和 AOP 。

    IOC

    IOC(Inversion Of Controll,控制反转)是一种设计思想,将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。

    AOP

    AOP(Aspect-Oriented Programming,面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。使用AOP之后我们可以把一些通用功能抽象出来,在需要用到的地方直接使用即可,这样可以大大简化代码量,提高了系统的扩展性。

    Spring AOP / AspectJ AOP 的区别?

    Spring AOP属于运行时增强,而AspectJ是编译时增强。

    Spring AOP基于代理(Proxying),而AspectJ基于字节码操作(Bytecode Manipulation)。

    AspectJ相比于Spring AOP功能更加强大,但是Spring AOP相对来说更简单。如果切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择AspectJ,它比SpringAOP快很多。

    二、Spring体系结构

    如下图所示,整个spring框架按其所属功能可以划分为五个主要模块,这五个模块几乎为企业应用提供了所需的一切,从持久层、业务层到表现层都拥有相应的支持,这就是为什么称Spring是一站式框架的原因。

     

    1、核心模块(Core Container)

    Spring的核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述。由IoC容器负责类的创建,管理,获取等。BeanFactory接口是Spring框架的核心接口,实现了容器很多核心的功能。

    Context模块构建于核心模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能。ApplicationContext是Context模块的核心接口。

    表达式语言(Expression Language)是统一表达式语言(EL)的一个扩展,支持设置和获取对象属性,调用对象方法,操作数组、集合等。使用它可以很方便的通过表达式和Spring IoC容器进行交互。

    2、AOP模块

    Spring AOP模块提供了满足AOP Alliance规范的实现,还整合了AspectJ这种AOP语言级的框架。通过AOP能降低耦合。

    3、数据访问集成模块(Data Access/Integration )

    该模块包括了JDBC、ORM、OXM、JMS和事务管理:

    • 事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。
    • JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
    • ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括hibernate、JPA、MyBatis等。而且可以使用Spring事务管理,无需额外控制事务。
    • OXM模块:提供了一个对Object/XML映射实现,将Java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。
    • JMS模块:用于JMS(Java Messaging Service),提供一套“消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

    4、Web模块

    该模块建立在ApplicationContext模块之上,提供了Web应用的功能,如文件上传、FreeMarker等。Spring可以整合Struts2等MVC框架。此外,Spring自己提供了MVC框架Spring MVC。

    5、测试模块

    Spring可以用非容器依赖的编程方式进行几乎所有的测试工作,支持JUnit和TestNG等测试框架。

    最后

    看完本次分享的内容,你是否对Spring有了一个更深层次的认识了呢?

    需要更多面试资源的小伙伴,可以关注我的公众号【Java技术zhai】获取。

    如果有哪位有缘的朋友看到了这篇文章,恰好有对本次Spring分享的内容补充 ,欢迎留言交流。

  • 相关阅读:
    (二)Python的应用领域
    (一)Python的特点(优点和缺点)
    python tkinter中的事件绑定
    Python Tkinter 文本框(Entry)
    Python Tkinter 窗口创建与布局
    Python Tkinter 之Listbox控件
    Python 获取文件类型后缀
    .Net下的MSMQ(微软消息队列)的同步异步调用
    C#调用ActiveX控件
    深入浅出数据库设计三范式
  • 原文地址:https://www.cnblogs.com/lfs2640666960/p/12444277.html
Copyright © 2020-2023  润新知