对Spring的深入理解

Posted xulei11-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对Spring的深入理解相关的知识,希望对你有一定的参考价值。

  说起来很惭愧,大学学了3年的java编程,一直都是简单的只知道如何使用某项技术,但是对于他是如何实现的却全然不知,今天看到一个问题:Spring是什么? 我心里一惊,Spring不就是Spring吗,难不成是春天吗?(内心os:我的天,我用了三年,居然不知道该怎么回答)

  于是我的百度结果如下:Spring是一个开源框架,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

  重新的深入理解Spring之后,我自己进行一下总结吧(有可能不是很准确,欢迎各位大佬指出错误)。

  假如工厂a要建一个飞机(plane),建飞机需要安装轮子(wheel),需要机翼(wing)。

  在没有spring容器之前的J2EE是这样实现的:

Plane p = new Plane();
//安装三个轮子
Wheel w1 = new Wheel();
Wheel w2 = new Wheel();
Wheel w3 = new Wheel();
p.setW1(w1);
p.setW2(w2);
p.setW3(w3);
//安装两个机翼
Wing wLeft = new Wing();
Wing wRight = new Wing();
p.setWLeft(wLeft);
p.setWRight(wRight);

  简单来说,这一架飞机需要什么组件,就要手动的找到并去创建组件。这可以说是超高耦合了。(高耦合:简单的来说就是对其他东西的依赖程度很高,牵一发而动全身。举个栗子:轮子要换成升级版的超级轮子,那么三个轮子就全要重新创建WheelPro w1 = new WheelPro()......),而spring通过Java的反射机制实现了依赖注解大大的降低了耦合度(后面的文章会讲到)。

  工厂a要提高效率,与工厂b达成协议,直接从工厂b进货零件,通过spring进行开发是这样实现的:

Plane p = new Plane();
p.setW1(b.getBean("Wheel"));
p.setW2(b.getBean("Wheel"));
p.setW3(b.getBean("Wheel"));
......

  从表面上看创建方式没有什么不同,甚至还没有减少代码量,但是却有着很大的区别。简单来说,a工厂需要任何零件时,只需在容器中请求(我需要一个新的轮子了),然后spring容器就会给a工厂自动分配一个来自b工厂的轮子,而a工厂不需要知道轮子是怎么来的。

  下面再来看一下spring的含义。

spring是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

  spring就是一个开发框架,spring的核心就是spring容器,容器中存放着各种组件,并管理这些框架。当有业务中需要某个对象时,我们不在需要再去new一个新的对象,而是直接从容器中获取即可。

ApplicationContext ctx  = new ClassPathXmlApplicationContext("spring-bean.xml")
B b=ctx.getBean("BBean");

  第二个问题是Spring和SpringMVC的关系?

  学习过ssh,ssh由spring+strus+hibernate组成。之后又学习了ssm,ssm由spring+springMVC+mybatis组成。(由于之前一直对spring是一个容器框架的理解不够,导致我一直没有搞清楚springMVC和spring的关系)

  前面已经讲过spring了,对的,它就是一个容器框架,而springMVC就可以算是放在这个容器中的一个模块了,而springMVC的功能便是管理web的框架,springMVC要实现就必须依赖于spring。

技术图片

 

   以下几个spring框架的模块可以对spring框架进一步理解。

  1. Spring容器:提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  2. Spring context:Spring的上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
  3. Spring AOP:面向切面编程。
  4. Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  5. Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  6. Spring Web:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  7. Spring MVC :spring提供的一个web框架。

以上是关于对Spring的深入理解的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Spring IoC

对Spring AOP的进一步深入理解

对Spring AOP的进一步深入理解

赠书:《深入理解 Spring Cloud 与实战》

深入理解Spring的容器内事件发布监听机制

深入理解Spring的容器内事件发布监听机制