spring解密之基础篇

4 篇文章 0 订阅

作者计划写一系列关于spring的文章来和大家分享学习和使用过程中的一些心得,同时也希望能跟大家一起讨论。

本文是第一篇之基础篇。

 

spring作为最近几年最成功的开源框架之一,作者也是从07年开始一直是基于ssh框架的开发工作,从最最开始的不理解慢慢到会用、再到理解、再到思考其用到的模式及设计原理,所以作者希望能用一系列文件逐步介绍spring框架本身,希望给自己留下一些记忆、给初学者之指导、给大家讨论、分享。

 

最近几年基于javaEE、MVC、B/S架构的系统特别流行,尤其是在基于企业级的一些系统,很多一部分都是基于这个框架下完成的。从最开始的model1,到model2,到现在的基于ssh(struts+spring+hibernate)框架的架构,无论是model1,model2,还是ssh,还是企业自己实现的MVC框架,其M部分都是一个框架的核心,M部分一般包括业务逻辑实现及数据操作存储等。spring则提供了这部分的支持,包括bean的管理、事务的支持、数据库操作的集成。

 

spring提供了两个核心的概念:IOC和AOP。

IOC(Inversion of Control)即反向控制或依赖注入(DI,Dependence Injection)。如正常情况下我们写程序的时候如果引用到别的bean都要首先声明一个这个类的对象。之后再使用这个对象进行操作,如果该对象又引用了有其他的对象,则需要再先声明其他的对象,如果其他的对象再引用的有其他的对象,则也必须先声明引用的其他的对象,如此反反复复,使我们大家花了很多时间在这种框架性的工作上,使我们没有更多的精力或时间花费在我们真正的逻辑的实现上。IOC即提供了这样的功能,我们的bean交由spring容器来管理,各个对象之间的关系我们不用去维护,只需要提供对应的set方法及对应的配置文件即可。这样我们可以花我们主要的精力放在我们的业务逻辑上。从字面上来讲,依赖注入即一个bean所依赖的类不需要我们自己去声明,而是交由spring把依赖的类自己注入进去。相比控制反转,用依赖注入来描述或翻译则更容易理解。

AOP其实是面向切面编程(Aspect-Oriented Programming,AOP),spring的AOP是提供了对AOP编程的支持。 AOP既是模块化、组件化的编程思想,如系统中的权限、日志、事务、安全等涉及到系统中很多模块的,即我们把这些模块独立出来管理,使其他相关的模块更注重自己核心的内容。

 

以下是spring模块的七个模块:

 

 

上图中展示了spring的七个模块,这七个模块是互相独立的,即我们项目中可以引用spring.jar文件,这样即七个模块都可以使用,也可以在只使用一个spring功能而只引用一个模块的jar包,如MVC框架模块我们竟然会用不到,这我们就不需要引用对应的jar包。在这插入一句:spring是非侵入式的,即我们的代码不需要使用任何的spring类。

 

核心容器及支持工具 模块提供了spring框架中IOC的基础实现。接口BeanFactory采用了工厂模式实现IOC以容器思想管理所有的bean。BeanFactory也是spring成为了容器,就像一个装水的木桶,是一个普通版的。Applicant Context模块 模块扩展了BeanFactory,提供对国际化、电子邮件、JNDI、EJB集成、远程调用等企业级服务提供支持,也就是Applicant Context接口使spring成为了框架,成为了豪华版的木桶。AOP模块则 提供了对AOP的支持,有别于传统的面向对象的思想一些难处理的问题则AOP的思想会很容易解决。JDBC和DAO模块 提供了对JDBC、事务的支持,利用模板模式使我们只需要传入对应的sql语句,一些模块的代码如获得连接、创建Statement、最后关闭这些资源等这些模板类的代码spring则进行了封装,使我们脱离出来。和对jdbc的支持类似,spring也用同样的处理方式对常用的ORM框架提供支持,spring有不会重复发明轮子的思想,所以它提供了对ORM框架的支持,包括Hibernate、JDO、iBatis等,使我们更方便的和这些优秀的框架集成。Web Context模块 则模块在Application Context(应用上下文)的基础上提供了对web上下文的支持,包括集成Struts框架。MVC框架模块 提供了对MVC框架的支持。

 

下面介绍一下spring的基本使用。

 

第一步 ,在web.xml文件中加入对spring配置文件的加载,如下:

名字为context的servlet负责加载spring的配置文件,来作为容器来管理bean。

名字为action的servlet是所有请求的入口,是struts的基础action,也是在web.xml文件中配置。

 

第二步 ,编写spring的配置文件,即applicationContext.xml,如下:

在这里首先配置数据源,即dataSource,直接从服务器中取jndi名称为student的数据源。事务管理是使用spring提供针对jdbc的DataSourceTransactionManager,最下面一个id为StudentManager的bean是真正业务中的bean,把这个bean包含在事务中。

上面的配置文件是spring集成jdbc进行数据库操作的配置,下面的文件是spring集成hibernate的配置文件:

 

这里的dataSource是用的c3p0这个开源的数据库连接池。这两个配置文件相比,第二个比第一个多了sessionFactory的配置,他是hibernate配置的基础。事务管理是采用spring对hibernate的支持的事务管理。

 

第三步 ,编写接口com.mashijie.student.service.StudentManager和其实现类com.mashijie.student.service.impl.StudentManagerImpl。 在程序中我们使用接口StudentManager,而在配置文件中我们注入的是其实现类StudentManagerImpl,所以无形之中我们就使用了针对接口编程,是系统符合了开闭原则和依赖倒转原则。

 

第四步, 在action中得到manage,调用manager的业务处理方法。在action中得到manager的代码如下:

 

此时架构已经完成,剩下的就是再写自己的manager和对应的bean的配置,这些都和类StudentManager的配置相识。

 

 

上面只是一个最基本的实现struts、spring、hiberante三个框架集成的架构(算不上架构),但是已经基本上满足了架构的需求,但是真正项目或产品开发的时候,一般都会再在这三个框架的基础上再进行能让自己操作方便的封装的操作,如取在action中取得bean上面是两行代码,很多时候系统会自己封装一个采用单例模式的一个系统服务类,而该类中直接有一个方法来取得bean,这样只需要一行代码就能完成。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值