zoukankan      html  css  js  c++  java
  • 对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框架。
  • 相关阅读:
    full gc
    C#调用C++编写的DLL
    用C#调用C++DLL提示找不到DLL解决方法【转】
    VS2015 编写C++的DLL,并防止DLL导出的函数名出现乱码(以串口通信为例,实现串口通信)
    VS2015 C++ 获取 Edit Control 控件的文本内容,以及把获取到的CString类型的内容转换为 int 型
    VS2015 建立一个C++的MFC简易窗体程序项目
    C# 实现串口发送数据(不用串口控件版)
    STM32 HAL库的定时器中断回调函数跟串口中断回调函数
    把 Python 脚本打包成可以直接双击运行的 .exe 文件 【转】
    Python 实现把 .cvs 文件保存为 Excel 文件
  • 原文地址:https://www.cnblogs.com/xulei11-/p/11507331.html
Copyright © 2011-2022 走看看