SpringFramework基础培训JavaEE框架培训之二郝金隆(haojinlong@189.cn)2014年7月2014年6月郝金隆Java培训系列2培训说明●培训假设–本培训材料认为阅读人员具备一定的Java开发基础,熟悉Java开发环境的配置和使用(如JDK、Eclipse的安装等)–前文阅读:《Java日志框架培训》●本培训的内容–包括spring框架的基本使用方法和技巧,以及配置文件说明–培训包括spring与数据持久化框架的集成方式–包括使用spring进行远程服务调用–不包括springmvc使用方法(将专题进行)●更多培训资料,请访问––(建设中)2014年6月郝金隆Java培训系列3目录1概述2Spring的基础使用3Spring集成ORM框架4Spring与远程调用2014年6月郝金隆Java培训系列4Spring简介●Spring简介–Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由RodJohnson在其著作ExpertOne-On-OneJ2EEDevelopmentandDesign中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。–目的:解决企业应用开发的复杂性–功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能●下载地址–官方地址:–下载地址:●所依赖的包(Java日志)–commons-logging(可以使用jcl-over-slf4j代替)、slf4j–关于Java日志的使用,可参见《Java日志框架培训》2014年6月郝金隆Java培训系列5SpringFramework整体框架CoreContainner(核心容器):➢spring-core、spring-bean:框架的最基础部分➢spring-context:在core和bean的基础上,提供被管对象的封装➢spring-expression:表达式的语义解析和封装DataAccess/Integration(数据存取/封装):➢spring-jdbc:提供一个jdbc的抽象层➢Spring-orm:提供OR映射的API,包括与JDO、JPA、Hibernate的集成➢Spring-oxm:提供与XML数据的映射➢Spring-jms:包含了生产和消费消息的功能➢Spring-tx:事务管理WEB:➢Spring-web:springweb基础整合共同➢Spring-webmvc:spring自己的mvc框架➢Spring-websocket:websocket支持,主要用于与客户端交互AOP:使用注解时必须引入,spring的一种增强,实现声明式事务管理Aspects:提供对aspectj的集成支撑Messaging:2014年6月郝金隆Java培训系列6目录1概述2Spring的基础使用3Spring集成ORM框架4Spring与远程调用2014年6月郝金隆Java培训系列7第一个Spring实例(1/4):创建接口类/***#Person.java--(2014年7月18日)*作者:郝金隆*联系方式:haojinlong@189.cn*/packagecom.github.haojinlong.trainning.spring.basic.inter;publicinterfacePerson{publicStringgetName();publicintgetAge();}/***#SayHello.java--(2014年7月18日)*作者:郝金隆*联系方式:haojinlong@189.cn*/packagecom.github.haojinlong.trainning.spring.basic.inter;publicinterfaceSayHello{publicStringsayHelo();}基础spring应用所需的jar包括:➢Spring-core➢Spring-beans➢Spring-context➢Spring-expressions外部依赖包括:➢commons-logging或者jcl-over-slf4j➢slf4j-api➢日志实现框架(log4j/log4j2/logback),具体请参考java日志框架培训2014年6月郝金隆Java培训系列8第一个spring示例(2/4):创建实现类packagecom.github.haojinlong.trainning.spring.basic.impl;importcom.github.haojinlong.trainning.spring.basic.inter.Person;publicclassJamesPersonimplementsPerson{@OverridepublicStringgetName(){returnJames;}@OverridepublicintgetAge(){return40;}}packagecom.github.haojinlong.trainning.spring.basic.impl;importcom.github.haojinlong.trainning.spring.basic.inter.Person;publicclassHaoJinlongPersonimplementsPerson{@OverridepublicStringgetName(){returnHaoJInlong;}@OverridepublicintgetAge(){return31;}}Packagecom.github.haojinlong.trainning.spring.basic.impl;Importcom.github.haojinlong.trainning.spring.basic.inter.Person;Importcom.github.haojinlong.trainning.spring.basic.inter.SayHello;publicclassMySayHelloimplementsSayHello{privatePersonperson;publicPersongetPerson(){returnperson;}publicvoidsetPerson(Personperson){this.person=person;}@OverridepublicStringsayHelo(){returnHello,+person.getName()+!;}}2014年6月郝金隆Java培训系列9第一个Spring示例(3/4):设置配置文件?xmlversion=1.0encoding=UTF-8?beansxmlns=:xsi=:schemaLocation=://=haoJinlongPersonclass=com.github.haojinlong.trainning.spring.basic.impl.HaoJinlongPerson/beanbeanid=jamesPersonclass=com.github.haojinlong.trainning.spring.basic.impl.JamesPerson/beanbeanid=mySayHelloclass=com.github.haojinlong.trainning.spring.basic.impl.MySayHellopropertyname=personref=haoJinlongPerson//bean/beanssrc/BasicApplicationContext.xml(文件名和地址可自己指定):指定mySayHello中的person使用haojinlongPerson,如修改为jamesPerson,则调用另外的BeanBeanID对应与下面的ref值2014年6月郝金隆Java培训系列10第一个Spring示例(4/4):使用spring容器进行调用ApplicationContextapplicationContext=newClassPathXmlApplicationContext(BasicApplicationContext.xml);PersonhPerson=applicationContext.getBean(haoJinlongPerson,Person.class);logger.debug(hPersonname:{},hPerson.getName());PersonjPerson=applicationContext.getBean(jamesPerson,Person.class);logger.debug(jPersonname:{},jPerson.getName());SayHellosayHello=applicationContext.getBean(SayHello.class);logger.debug(sayHello:{},sayHello.sayHelo());调用代码:配置文件名称配置文件中的beanid配置文件中的beanid配置文件中只有一个SayHello的实现,故不需要指定beanid2014-07-1910:37:24,094DEBUGc.g.h.t.spring.basic.main.BasicMain28-hPersonname:HaoJInlong2014-07-1910:37:24,099DEBUGc.g.h.t.spring.basic.main.BasicMain31-jPersonname:James2014-07-1910:37:24,099DEBUGc.g.h.t.spring.basic.main.BasicMain34-sayHello:Hello,HaoJInlong!输出:2014年6月郝金隆Java培训系列11Spring中使用构造函数(1/2):construct-arg方式?xmlversion=1.0encoding=UTF-8?beansxmlns=:xsi=:schemaLocation=://=basicPersonclass=com.github.haojinlong.trainning.spring.basic.impl.B