EJB 的学习成本很高, 开发效率却不高, 需要编写很多重复的代码, 这些问题阻止了 EJB 的继续发展. 就在 EJB 技术止步不前的时候, Spring 框架在合适的时机出现了, Spring 框架和 EJB 不同, Spring 框架的学习成本非常低, 它是一个轻量级的开发框架, 更多强调面向对象的设计, 而不是让现有的技术变得更复杂, 它使用 JavaBean 替代了复杂的 EJB, 并且为 JavaBean 提供了简单易用的应用配置框架.
一个 JavaBean 就是一个公共类, 它可以被其它 JavaBean 类作为组件来使用, 并且 JavaBea 之间的组配不需要在代码级实现, 完全可以在配置层和注解层实现, Spring 会自动选择相适配的 JavaBean 来组配运行. 这种自动适配机制避免了 JavaBean 与使用类之间的代码耦合, 提高了程序的可扩展性和维护性.
例如类 A 要使用类 B, 类 B 是类 A 的属性, 如果直接在类 A 中创建类 B, 当类 B 因业务需要修改时, 也需要修改类 A 的代码, 这种写法就是代码耦合, 也可以说类 A 和类 B 属于代码耦合.
假如我们把类 B 的创建交给 Spring,Spring 通过配置文件或者通过 Java 注解来创建类 B, 然后再由 Spring 把创建的类 B 实例和类 A 的实例组配起来, 这样就避免了类 A 与类 B 的代码耦合. 这种机制就是 Spring 框架的控制反转思想, 相当于类 A 把创建类 B 权利交给了 Spring, 由 Spring 来控制类 B 的创建.
Spring 框架还有一个比较重要的功能, 那就是 AOP 机制. Spring 框架的 AOP 机制可以把系统中的一些通用功能抽取出来, 作为 JavaBean 来使用, 与此同时在系统的业务流程代码中设置调用这些 JavaBean 功能的切入点, 当系统业务流程执行到切入点时, Spring 会自动把需要调用的 JavaBean 横向切入到业务流程指定的位置, AOP 的这种技术也称为 "横切" 技术.
例如, 在一个业务系统中, 当用户要进入需要操作权限的页面时, 系统会先进入登录页, 要求用户登录系统后再进入该页面. 这样的操作权限页面会有多个, 如果为每个页面都写登录业务逻辑处理代码, 显然是会造成代码冗余, 维护起来也非常麻烦. 比较好的做法是把用户登录业务处理作为一个独立的 JavaBean, 这个 JavaBean 也称为 AOP 的 "切面". 然后在需要用户操作权限的业务流程页面设置 "切入点", 并通过注解或配置文件将 "切面" 和 "切入点" 连接起来. 当业务流程执行到 "切入点" 时, Spring 框架会自动把与切入点关联的 "切面" 切入到业务流程 "切入点" 所在的位置, 开始执行 "切面" 代码, 直至切面代码执行完毕, 然后根据 "切面" 返回的结果确定是否执行后面的流程. 下图是用户登录功能切入到业务流程的示意图.
Spring 框架还有一个最大的特征就是和现有的开发框架不是竞争关系, 而是采用融合的方式将其它框架集成进来, 充分利用其它框架的技术, 为系统实现提供最优解决方案. SSM 就是 Spring 框架融合了 MVC 框架技术和 MyBatis 数据库框架技术.
来源: http://www.bubuko.com/infodetail-3360312.html