版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《spring基础功能分享》
(HDC)2011-12-15
Spring是一个非常优秀的开源产品,我记得在04年的时候,在国内突然冒出很多可供JAVA开发者使用的优秀开源产品,比如webwork,struts,spring,ibatis,hibernate等等,到现在为止,这些开源产品的版本都算比较稳定了。很多现有的开源产品,或则刚诞生和发展起来的开源产品,几乎每一款都能兼容Spring,或则和Spring搭档.
Spring提供的内容很广,某些章节的内容也很深,一般来讲,它包括有如下的这些模块构成:1、核心容器:Spring核心容器为Spring框架提供了基础功能,在这里,查看源码,你会发现有一个特别的类:BeanFactory,它是最基本的Spring容器和DI所依赖的基础。2、ApplicationContext(应用上下文)模块:他是建立在核心容器之上。这个应用上下文扩展了BeanFactory类,添加了一些别的应用支持,比如I18N(国际化)、应用生命周期事件(比如BeanPostPorcessor接口)等。3、AOP模块:与DI一样,它支持应用对象之间的松耦合,也是我们开发程序时一直追求的方式。4、JDBC抽象及DAO模块:jdbcTemplete模板5、ORM映射集成模块:支持hibernate,jpa,ibatis等框架的持久化模板6、SpringMVC框架:类似于STRUTS\WEBWORK框架,拥有(model/view/controller)7、SpringPortletMVC8、SpringWeb模块9、远程调用,包括RMI,Hessian,Webservice等10、JAVA消息服务,支持很多开源消息产品,比如apacheactiveMQ,MuleESB,JbossMQ等。11、。。。。。。今天,我们就挑选Spring在我们的应用开发中最常被使用的模块来讲解一下:DI和AOP,数据持久化。
其中SampleDAO中的dataSource将由容器在运行期动态注入,而DataSource的具体配置和初始化工作也将由容器在运行期完成。对比传统的实现方式(如通过编码初始化DataSource实例),我们可以看到,基于依赖注入的系统实现相当灵活简洁。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定SampleDAO中所需的DataSource实例。上面的实例中,我们假设SampleDAO是一个运行在J2EE容器中的组件(如Weblogic)。在运行期,通过JNDI从容器中获取DataSource实例。现在假设我们的部署环境发生了变化,系统需要脱离应用服务器独立运行,这样,由于失去了容器的支持,原本通过JNDI获取DataSource的方式不再有效。我们需要如何修改以适应新的系统环境?很简单,我们只需要修改dataSource的配置:
对于DI,常见的有如下几种:1、基本数据类型的set方法注入:publicclassUser{ privateintuserid; privateStringusername; privateStringpassword;
//为这些属性添加相应的getter和setter}配置文件:<beanid="user"class="com.wadata.inject.User"> <propertyname="userid"value="1"></property> <propertyname="password"value="pass_word"></property> <propertyname="username"value="tom"></property></bean>测试类:Useruser=(User)context.getBean("user");(注意,spring不一定要让你拥有跟配置文件对应的属性,但一定要拥有配置文件属性所对应的set方法)2、基本数据类型的构造器注入(构造方法):为刚才的User添加一个构造方法 publicUser(Stringusername,Stringpassword){ this.username=username; this.password=password; }配置文件:<beanid=“user”class=“com.wadata.inject.User”> <constructor-argvalue="tom"></constructor-arg> <constructor-argvalue="pass_word"></constructor-arg></bean>当然,你也可以如下严格定义参数类型:<constructor-argvalue="tom"type="String"index=“0"></constructor-arg>这个意思就是构造函数中,第一个参数值类型是String,值为tom,并且是构造函数第一个参数设值注入3、特殊类型的注入,比如Set,List,Map等数组的值注入:publicclassUser{ privateSetset; privateListlist; privateMapmap; privateUseruser; //添加相应的set,get方法}配置文件如下所示:Set的注入:<propertyname="set"> <set> <value>setvalue1</value> </set></property>List的注入:<propertyname="list"> <list> <value>listvalue1</value> </list></property>Map的注入:<propertyname="map"> <map> <entrykey="key2"value="value2"></entry> </map></property>1、单实例的BEAN延迟加载方式:ApplicationContextcontext=newClassPathXmlApplicationContext("
com/wadata/conf/spring.xml"); Useruser=(User)context.getBean(“user”); Bean配置信息通过ClassPathXmlApplicationContext(“com/wadata/conf/spring.xml”)加载进来,然后通过getBean(“user”)获取相应的bean实例。注意,单实例的bean,通过getBean()方式是延迟加载的。2、通过容器管理了的应用上下文:对于单实例Bean,应用上下文启动后会预载入所有的单实例bean。当应用程序需要这些单实例bean的时候,直接获取了,不需要等待他们被创建。 由于极大多数应用用到的bean都是单实例的,因此,spring也建议使用applicationContext来获取bean实例,而不是通过getBean()的方式获取。另外一点,通过getBean()的方式,无形中增加了系统之间的耦合性,万一beanID发生了改变呢?这样你就需要修改你的应用代码。
AspectOrientedProgramming(AOP)是近来非常热门的一个话题。AOP,很多都译作“面向方面编程”。其实,译成“面向切面编程”更来得合适,AOP的本意,是在针对业务处理过程中的切面进行切入、提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果,使之真正意义上做到对象或对象之间的耦合。 在我们开发基于WEB的JAVA应用中,AOP随处可见,比如我们常用的权限管理,登录用户的session是否超时判断,还有大家时常会碰到的数据库事务管理,都会涉及到AOP的概念和行为。如下就是我们常用的数据库事务管理的一个典型AOP配置。
【题外话:Spring提供的事务AOP,是从服务层织入控制的,而不是在DAO层,这个需要注意。】
AOP介绍
我们现在就来看看AopImpl这个类,这是个纯POJO,可以发现,这个类并没有和任何的业务对象进行绑定,最多也只是通过DI的形式,注入了一些所需要的bean。但通过以上的配置,这个类却可以在正确的时间,做正确的事情。
【这里也可以发现,我并没有通过Context.getBean(“beanID”)来获取相应的bean实例。】 众所周知,在接大多数应用开发中,都脱离不了数据库概念。数据库持久化技术,是一个非常常见且常用的一个技术话题,在早期开发的代码中【没有spring框架提供】,如下的代码片段是我们非常熟悉的:数据库持久化介绍 上面的代码,大致实现了数据库一条实体记录的修改。通过对如上代码的分析,发现一个现象:为了执行一个SQL语句【stmt.executeUpdate(“UPDATEuserSETage=18WHEREid=‘erica’”);】,我们必须编写其余可以重复、且和业务无关的代码,并且,这样的代码还会在系统其他地方(也许是每个需要数据库访问的地方)重复出现。于是,大家开始寻找一些设计模式以改进如此的设计,Template模式的应用是其中一种典型的改进方案:让公用代码尽可能抽取,开发者只关心自己业务有关的SQL编写。比如,可以将如上的代码精简到如下这2行: 这就是spring带给我们的好处。 Spring提供了一组数据访问框架,集成了多种数据访问技术,用户可以灵活选择JDBC、Hibernate、JPA、iBatis等任意一个持久化框架,实现数据库的访问。选择Spring提供的模板技术,可以让开发者消除数据持久化代码中的麻烦,特别是在事物控制时,使用这样的模板,会带给开发者事半功倍的效果。首先,我们就来看看Spring给我们提供的多个数据库访问模板,分别适用于不同的持久化机制。
注意:绿色背景是我们开发中常用的一些模板类。 使用如上的模板,我们只需要在Spring上下文里配置相应的dataSource的Bean,然后把它织入到程序的DAO层即可。【回顾DI介绍章节中的例子】
这样,以JDBC模板为例,在我们的DAO实现类中:SampleDAO,核心的代码如下:publicclassSampleDAOimplementSampleDaoService{ ……privateDataSourcedataSource;publicvoidsetDataSource(DataSourcedataSource){ this.dataSource=dataSource;}//业务方法publicvoidinsertUser(RegisterInforegInfo){ JdbcTemplatejt=newJdbcTemplate(dataSource); jt.update("insertintousers(username)values(‘tester');");}……} 虽然直接织入模板很不错,很传统的JDBC代码相比,已经大大减少了代码量。但是,Spring提供了比如上更方便的一组DAO基类,可以用于管理模板:这样,以JDBC模板为例,在我们的DAO实现类中:SampleDAO,核心的代码如下:publicclassSampleDAOextendsJdbcDaoSupportimplementSampleDaoService{ ……//业务方法publicvoidinsertUser(RegisterInfore
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《一念永恒》语录
- 玉溪师范学院《理论力学》2021-2022学年第一学期期末试卷
- 施工组织总体设想、方案针对性及施工段划分
- 2024零代码新动能4.0 -企业零代码数字化创新实践案例集
- 2024年配气机构:进排气门项目评价分析报告
- 四下语文20课教学课件教学课件教学
- 茶山转让合同案例
- 餐饮店亏损状态退股协议书
- 博士后流动站 劳动合同
- 北京学位占用合同
- 公园户外音响系统维护合同
- 2024-2030年中国风电运维行业发展现状规划分析报告
- 2024年国际货物买卖FOB条款合同
- 华南理工大学《嵌入式系统》2022-2023学年期末试卷
- 统编版(2024)七年级上册道德与法治第三单元《珍爱我们的生命》测试卷(含答案)
- 江苏省中等职业学校学业水平考试语文卷含答案
- 售后服务保障方案3篇
- 2025届江苏省南通市海安市海安高级中学物理高三上期中联考试题含解析
- 电梯安装主要施工方法及施工技术措施
- 礼修于心 仪养于行 课件-2023-2024学年高一上学期文明礼仪在心中养成教育主题班会
- 解除终止劳动合同备案登记表
评论
0/150
提交评论