Spring之旅--简述Spring框架及各项功能

来源:互联网 发布:matlab交易程序源码 编辑:程序博客网 时间:2024/04/30 14:14

        老习惯,在学习Spring框架之前,我们得需要明白Spring框架到底是个神马东东以及Spring框架所能够提供的功能。

        Spring是一个开源的控制反转(Inversion of Control , ioc)和面向切面(AOP)的容器框架,Spring框架最主要的目的是简化企业应用开发。从其中的描述当中,我们可以知道两个重要的概念:控制反转(IOC)以及AOP(面向切面编程)。要想了解Spring框架,我们必须了解和掌握这两个重要的概念。

        那么,我们首先开始了解控制反转(IOC)概念。在了解之前,我们先来看一段代码。

    public class StudentServiceImpl{       private StudentDao studentDao = new StudentDaoImpl();       public void save(Student student){          studentDao.save(student);       }    }

        从以上代码片段中,StudentServiceImpl类依赖于StudentDao对象,然后StudentDao 依赖对象是在StudentServiceImpl类中进行创建及维护的,这种编程方式使得应用代码间的耦合性很高,不利于应用的维护和管理。这时候呢,采用控制反转的方式,能够将降低代码间的耦合程度,极大地利于我们应用的管理和维护。所谓的控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护是由外部容器负责的。这样控制权就由应用内部转移到了外部容器,控制权的转移就是所谓的反转。接下来,我们需要考虑一个问题:我们将控制权转移到外部容器,也就是说由外部容器创建和维护类的依赖对象,那么在类运行时,依赖对象如何实例化?这里就不得不引入另一个概念:依赖注入(Dependence Injection)。所谓的依赖注入(DI)就是在应用运行期,由外部容器动态地将依赖对象注入到组件中。依赖注入是对控制反转的另一种解释,也是一种补充,使得我们更好的理解和使用控制反转。当我们使用依赖注入方式注入类的依赖对象时,那么以上的代码可以改成以下的方式。

    public class StudentServiceImpl{       private StudentDao studentDao;      //通过构造器方式,让容器把创建好的依赖对象注入到StudentServiceImpl类中,当然也可以使用setter方式进行注入       public StudentServiceImpl(StudentDao studentDao ){            this.studentDao = studentDao;       }       public void save(Student student){          studentDao.save(student);       }    }
        以上代码中,我们可以看出采用依赖注入的方式,使得代码间的耦合程度变低,就是所谓的解耦和,这是Spring框架最主要的一个目的之一。

        我们了解完依赖注入的概念,接下来我们粗略地了解一下AOP编程这个概念,这里只是简述一下AOP,因为限于这篇文章目的:简述Spring框架,这里不会多讲AOP编程,以后再另写一篇关于AOP编程的文章,跟大家探讨AOP的知识。所谓的AOP就是在运行时,动态地将代码切入到类的指定方法,指定位置上的编程思想就是面向切面编程思想。我们知道面向对象编程(OOP)的特点是继承、多态和封装,通过继承、多态和封装,可以将类的功能分散到不同的类中去,这样降低了代码的复杂性,使类可以重用。但是随着代码的分散,也增加了代码的重复性,比如两个不同的类,都需要增加上一个日记功能,在增加日记功能代码中,可能两个类中的代码是相同的。当使用AOP编程时,在运行的时候,可以动态将日记功能切入需要的代码中,而不需要重复的编写重复的代码。AOP(面向切面编程)是OOP的一个很好的补充。

       好了,回过神来,我们的关注点其实是为何要使用Spring,一不小心就说多了。那么我们为什么要使用Spring呢,原因就不用讲了,任性呗。少年不要着急,容我来讲讲使用Spring的好处。至少在我看来,我们在项目中引入Spring框架,立即可以为我们带来以下的好处。

       第一,降低组件之间的耦合度,实现软件各层间的解耦。

       第二,可以使用容器提供的众多服务,如:事务管理服务、消息服务等等,当我们使用容器管理事务时,开发人员就不再需要手工去控制事务,也不需要处理复杂的事务传播了。

       第三,容器提供单例设计模式支持,开发人员不需要再自己编写实现代码。

       第四,容器提供了AOP技术,利用AOP技术能够很容易实现权限拦截、运行期监控等功能。

       第五,容器提供的众多辅助类,使用这些类能够加快应用的开发,比如:JdbcTemplate、HibernateTemplate等等。、

       第六,Spring框架对于主流的应用框架提供了集成支持,如:Hibernate、JPA、Struts等,便于应用的开发。

       当然,Spring框架提供的服务可不止这几种,还有很多的优秀的服务,我在这里就不一一列举出来,因为怎么说呢,男人一直举着也是很痛苦的呢,少年们,你们说是吧。总之呢,以上的服务呢,是我们接下来主要学习的内容,少年们,赶紧上车,老司机要开车了。

        等等,忘了一点,先前总是听人家说,这个框架是轻量级框架,那个是重量级框架的,以前嘛,小编还没有聪明绝顶,绝顶的时候,认为轻量级和重量级框架的区别在于框架的文件大小,一般大于10M的框架就认为是重量级的框架。其实那样划分是不准确的,也可以说是不对的。框架是轻量级还是重量级,主要是看使用了框架服务的多少。当使用的服务越多,那么我就可以认为是重量级的,容器要为普通的Java对象做的工作就越多,必然会影响到应用的发布时间或者是运行性能。

0 0
原创粉丝点击