spring入门

发表时间:2017-05-17 17:37:49 浏览量( 129 ) 留言数( 0 )

学习目标:

1、了解Spring的历史

2、了解DI和IOC等基本概念


学习过程:

这节课我们先把spring的相关概念简单的说一下,spring的概念比较多,而且比较复杂,可能一时不能理解,但是在后面的不断学习中,大家就知道,spring的概念虽然很难理解,但是spring是使用是非常简单的,所以大家千万不要给这节课的这些概念吓着了。后面就会慢慢喜欢上spring的了。

一、spring的历史

1、spring产生

长久以来EJB一直被认为是开发企业级应用程序的标准技术,虽然它有很多的问题,但是从来没有敢质疑它,因为EJB是J2EE的核心技术之一,而Rod Johnson竟然宣称,绝大多数的J2EE应用根本不需要EJB。Rod Johnson是谁?他就是Spring Framework创始人,著名作者。 Rod这个人非常有意思,他在悉尼大学获得了计算机学位,同时还获得了音乐学位,更让人觉得不可思议的是,在回到软件开发工作之前,他还获得了音乐学的博士学位。在软件领域,他的造诣也是很深,有着相当丰富的C/C++技术背景的,Rod早在1996年就开始了对Java服务器端技术的研究。他是一个在保险、电子商务和金融行业有着丰富经验的技术顾问,同时也是JSR-154(Servlet 2.4)和JDO2.0的规范专家、JCP的积极成员,是Java development community中的杰出人物。也许也就只有他这么一个人才能够编写出像spring框架这样优雅而富有艺术性的技术了。

除了开发Spring框架本身以外,他所著作的《Expert One-on-One J2EE Development without EJB》一书,其影响力比Spring框架本身还更加震撼。EJB是什么?在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码。一个技术规范:EJB 从技术上而言不是一种"产品",是一种描述了构建应用组件要解决的标准。EJB最初的设计思想考虑的是为分布式的应用服务的,分布式是针对大型应用构造的跨平台的协作计算,EJB最初的目的就是为这种计算服务的。EJB的大部分功能在很多应用程序中都是用不到的,所以如果做一般的应用程序使用EJB显得太臃肿了。Spring的出现恰恰为了解决这个问题。所以经常有人说EJB是重量级的,而spring是轻量级,所以很多企业都不会使用EJB,感觉就是使用大炮打苍蝇一样,相反spring就不一样了,它非常轻巧,可以满足大部分的企业开发的需要,可以说Spring框架是一个广受欢迎的但是非标准的开源框架。

2、spring的思考

其实上面我们说了很多,但是spring到底是做什么的呢?Spring的设计非常好,它一直提倡的是就是“不要重复发明轮子 ”,“不要重复发明轮子 ”的意思就是企业中任何一项工作实际上都有人做过,我们需要做就是直接使用就行了,就好像生成一辆汽车,并不需要什么都要我们生产。和我们软件开发一样,当我们需要一个功能的时候,别人已经做过,我们需要用的时候,直接拿来用即可,而不要重新制造,事实上我们以前开发程序的时候一直就是这样,使用了大量的第三方的软件包。spring就是这样,它对很多其他的框架进行支持,spring的作用就是提供一个容器,管理所有的功能组件。

看看我们一直学习了很多框架,比如struts2,包括以后还有很多框架需要学习,但是我们一直在寻找一种方案:用最小的开销找到最佳的解决问题的方案。

我们需要这样一个框架:

我们首先考虑的是它必须要在最佳位置满足我们的需求---我们需要的80%的功能必须是即插即用的。

框架必须是易于扩展的.扩展并不意味着勉强搭配,它是指框架以一种优美的方式来延伸.

我们有很多框架,比如Struts(MVC), Hibernate(持久化 ),Log4J(日志),Lucene(搜索),以上这些框架越来越易于使用、理解和扩展,能满足我们普遍的需求。却没有一个专注于企业应用的核心需求:持久化、事务处理以及和其他企业资源的整合.

Spring框架是以简化J2EE应用程序开发为特定目标而建立的。Spring是一个开源框架,是为简化企业级应用开发应运而生的。Spring使用基本的JavaBeans来完成以前只可能由EJB完成的事情. 

Spring框架的特点是轻量级,从大小和应用开支上说Spring都算是轻量级的。整个Spring框架可以打成一个2.5MB多一点的JAR包,并且Spring处理的开支也非常的小。更重要的是:Spring是非侵入式的,基于Spring开发的应用中的对象一般不依赖于Spring的类。

简而言之,Spring是一个轻量级的IOC(DI)和AOP容器框架。

二、依赖注入(DI)和控制反转(IOC)

上面提高spring是一个轻量级的IOC(DI)和AOP容器框架,这句话可不好理解,下面我们就逐一解析一下什么是IOC、DI和AOP

1、依赖注入(DI)

依赖注入(Dependency Injection,DI),为什么使用依赖注入?其目的就是解耦合。实现每个组件块时只关注组件内部的事情。每个组件实现自己的功能,但是各个组件之间通过依赖注入的方式可以让各个组件一起配合工作,完成整个应用程序的整体功能,

2、SpringIOC容器

使用容器管理组件控制反转(Inversion of Control,IoC),简言之就是代码的控制器交由系统控制,而不是在代码内部,通过IOC,消除组件或者模块间的直接依赖。

控制反转(IOC)和依赖注入(DI)虽然是两个概念,但是在spring里面其功能是一直的,就是把组件交个spring容器进行管理,讲通俗一点是指类之间的访问关系。比如如果类A访问类B的属性或方法,或者类A负责实例化类B,那么可以说类A依赖类B。

Spring提供了一种松耦合的技术,称为依赖注入(DI)。让组件依赖于抽象,当组件要与实际对象发生依赖关系时,通过抽象来注入依赖的实际对象。使用DI,对象是被动接收依赖类而不是自己主动去找。我们可以将DI理解为JNDI的反转,对象不是从容器中查找它的依赖类,而是容器在实例化对象的时候主动将它的依赖类注入给它。

3、AOP面向切面的编程

Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。Spring对面向切面编程提供了强大的支持,通过将业务逻辑从应用服务(如监控和事务管理)中分离出来,实现了内聚开发。应用对象只做它们该做的事情(业务逻辑),它们不负责或关心其他问题(如日志和事务支持)。

4、容器

Spring是一个容器,因为它包含并且管理对象的生命周期和配置。你可以通过配置来设定BEAN是单一实例还是每次请求产生一个实例,并且设定它们之间的关联关系。Spring有别于传统的重量级的EJB容器(大且笨重).