我们一起学习Spring之Spring简介(一)
首先声明,我是一个spring初学者,写这篇blog的目的是为了能和大家交流。文中不当之处还望大佬指出,不胜感激!
好了,现在我们开始进入正题。
很多小伙伴在学习Java的时候都会有人建议你去学习Spring,那么什么是Spring呢?SPring是由Rod Johnson创建的一款开源的轻量级Java框架。Spring的诞生之初是为了解决企业级Java开发的复杂性,使得我们通过简单的javaBean能够实现以前只有使用EJB(Enterprise JavaBean)才能完成的一些事情。但是Spring不仅仅局限于服务器端的开发,任何的Java应用都能够在Spring中获益。
前面说到Spring是为了简化Java的开发,降低Java开发的复杂性,那么Spring在这方面采取了什么策略呢?Spring在这方面采取了4种关键的策略:
1.基于POJO的轻量级和最小侵入性编程;
2.通过依赖注入和面向接口实现松耦合;
3.基于切面和惯例进行声明式编程;
4.通过切面和模板减少样板式代码。
下面从整体上认识一下Spring的主要特征:
*轻量:从大小与开销两方面而言Spring都是轻量的。此外,Spring是非侵入式的:使用Spring,我们的类还是pojo类,完全不用继承和实现Spring的类和接口等。 也就是说,使用Spring的应用中的对象不依赖于Spring的特定类。
*IoC:Spring通过控制反转技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。可以认为IoC与JNDI相反--不是我们自己控制对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它,这就是DI--依赖注入。 基本上就是对象不用自己动手管理和创建。完全由容器管理,我们只管用就行。
*AOP:Spring提供了面向切面的编程支持,AOP将与程序业务无关的内容分离提取,应用对象只实现它们应该做的--完成业务逻辑--仅此而已。它们并不负责其它的系统级关注点,例如日志或事务支持。 AOP将与业务无关的逻辑横切进真正的逻辑中。
*框架:Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),而用户就有更多的时间和精力去开发应用逻辑。 所有Spring的这些特征都能帮助我们够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
*借助Spring,荣国依赖注入,AOP应用,面向接口编程,来降低业务组件之间的耦合度,增强系统的扩展性。
* 让已有的技术和框架更加易用。
*利用其对hibernate的SessionFactory、事务管理的封装,更简洁的应用hibernate.
*Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部 *利用AOP思想,集中处理业务逻辑,减少重复代码,构建优雅的解决方案。
*低侵入式设计,代码污染极低。 Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的"一站式"选择,并贯穿表现层、业务层及持久层。 虽然Spring可以一站式解决整个项目问题,但是Spring并不想取代那些已有的框架,而是与它们无缝地整合。Spring可以降低各种框架的使用难度,他提供了对各种优秀框架(如Struts、Hibernate、Hessian、Quartz等)的直接支持。 使用Spring的主要目的是使J2EE易用和促进好的编程习惯,Spring的目标就是让已有的技术更加易用。 所以Spring的一个重要思想就是整合和兼容。
首先我们先来看一下Spring是如何做到基于POJO的最小入侵性编程的。
A.激发POJO的潜能
Spring是竭力避免因为自身的API而弄乱使用者的应用代码的,同样不会强迫开发者继承实现的Spring的接口或者继承规范的Spring类。与其他的Java框架不同的是,Spring在构建基于Spring的应用的时候,通常不会有任何痕迹表明这是使用了Spring的。
例如:
1 package spring; 2 public class HelloWorldBaen{ 3 public String sayHelloWorld(){ 4 return "Hello World!"; 5 } 6 }
可以看出来这是一个简单的Java类——POJO。没有任何的地方表示是一个Spring组件。Spring的非入侵性编程就是这个类在Spring和非Spring应用中都能发挥同样的作用。
PS:文中若有不当之处,请各位在评论区指正。谢谢!2017-11-12