spring基础功能分享PPT课件

上传人:无*** 文档编号:187485807 上传时间:2023-02-14 格式:PPT 页数:25 大小:1.78MB
收藏 版权申诉 举报 下载
spring基础功能分享PPT课件_第1页
第1页 / 共25页
spring基础功能分享PPT课件_第2页
第2页 / 共25页
spring基础功能分享PPT课件_第3页
第3页 / 共25页
资源描述:

《spring基础功能分享PPT课件》由会员分享,可在线阅读,更多相关《spring基础功能分享PPT课件(25页珍藏版)》请在装配图网上搜索。

1、L/O/G/O2021/3/91spring基础功能分享(HDC)2011-12-152021/3/92 Spring是一个非常优秀的开源产品,我记得在04年的时候,在国内突然冒出很多可供JAVA开发者使用的优秀开源产品,比如webwork,struts,spring,ibatis,hibernate等等,到现在为止,这些开源产品的版本都算比较稳定了。很多现有的开源产品,或则刚诞生和发展起来的开源产品,几乎每一款都能兼容Spring,或则和Spring搭档.strutswebworkspringibatishibernateJMSESB.2021/3/93Spring提供的内容很广,某些章节的

2、内容也很深,一般来讲,它包括有如下的这些模块构成:1、核心容器:Spring核心容器为Spring框架提供了基础功能,在这里,查看源码,你会发现有一个特别的类:BeanFactory,它是最基本的Spring容器和DI所依赖的基础。2、Application Context(应用上下文)模块:他是建立在核心容器之上。这个应用上下文扩展了BeanFactory类,添加了一些别的应用支持,比如I18N(国际化)、应用生命周期事件(比如BeanPostPorcessor接口)等。3、AOP模块:与DI一样,它支持应用对象之间的松耦合,也是我们开发程序时一直追求的方式。4、JDBC抽象及DAO模块:j

3、dbcTemplete模板5、ORM映射集成模块:支持hibernate,jpa,ibatis等框架的持久化模板6、Spring MVC框架:类似于STRUTSWEBWORK框架,拥有(model/view/controller)7、Spring Portlet MVC8、Spring Web模块9、远程调用,包括RMI,Hessian,Webservice等10、JAVA消息服务,支持很多开源消息产品,比如apache activeMQ,MuleESB,JbossMQ等。11、。今天,我们就挑选Spring在我们的应用开发中最常被使用的模块来讲解一下:DI和AOP,数据持久化。2021/3/

4、94DI介绍我们首先来看一个截图,搞JAVA开发的,都非常清楚如下的这个代码,这是非常典型的数据源配置:这个代码其实包含了2个概念:1、参数的注入:比如字符串:java:comp/env/jdbc/sample2、bean之间的依赖注入:2021/3/95 其中SampleDAO中的dataSource将由容器在运行期动态注入,而DataSource的具体配置和初始化工作也将由容器在运行期完成。对比传统的实现方式(如通过编码初始化DataSource实例),我们可以看到,基于依赖注入的系统实现相当灵活简洁。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定SampleDAO中所

5、需的DataSource实例。上面的实例中,我们假设SampleDAO是一个运行在J2EE容器中的组件(如Weblogic)。在运行期,通过JNDI从容器中获取DataSource实例。现在假设我们的部署环境发生了变化,系统需要脱离应用服务器独立运行,这样,由于失去了容器的支持,原本通过JNDI获取DataSource的方式不再有效。我们需要如何修改以适应新的系统环境?很简单,我们只需要修改dataSource的配置:2021/3/96 对于DI,常见的有如下几种:1、基本数据类型的set方法注入:public class User private int userid;private Str

6、ing username;private String password;/为这些属性添加相应的getter和setter配置文件:测试类:User user=(User)context.getBean(user);(注意,spring不一定要让你拥有跟配置文件对应的属性,但一定要拥有配置文件属性所对应的set方法)2021/3/972、基本数据类型的构造器注入(构造方法):为刚才的User添加一个构造方法public User(String username,String password)this.username=username;this.password=password;配置文件:

7、当然,你也可以如下严格定义参数类型:这个意思就是构造函数中,第一个参数值类型是String,值为tom,并且是构造函数第一个参数设值注入2021/3/983、特殊类型的注入,比如Set,List,Map等数组的值注入:public class Userprivate Set set;private List list;private Map map;private User user;/添加相应的set,get方法配置文件如下所示:Set的注入:setvalue1List的注入:listvalue1Map的注入:2021/3/99对于属性user的对象注入,可以通过如下的配置文件来描述:测试代

8、码:public static void main(String args)ApplicationContext context=new ClassPathXmlApplicationContext(com/wadata/conf/spring.xml);-1User user=(Student)context.getBean(“user”);-2System.out.println(user.getList();System.out.println(user.getSet();System.out.println(user.getMap();System.out.println(user.g

9、etUser();第一行代码是将配置文件加载。第二行代码是通过beanID获得一个bean实例。在这里,我介绍一下应用程序获取bean实例的2种方式:2021/3/9101、单实例的、单实例的BEAN延迟加载方式:延迟加载方式:ApplicationContext context=new ClassPathXmlApplicationContext(com/wadata/conf/spring.xml);User user=(User)context.getBean(“user”);Bean配置信息通过ClassPathXmlApplicationContext(“com/wadata/con

10、f/spring.xml”)加载进来,然后通过getBean(“user”)获取相应的 bean实例。注意,单实例的bean,通过getBean()方式是延迟加载的。2、通过容器管理了的应用上下文:对于单实例Bean,应用上下文启动后会预载入所有的单实例bean。当应用程序需要这些单实例bean的时候,直接获取了,不需要等待他们被创建。由于极大多数应用用到的bean都是单实例的,因此,spring也建议使用applicationContext来获取bean实例,而不是通过getBean()的方式获取。另外一点,通过getBean()的方式,无形中增加了系统之间的耦合性,万一beanID发生了改

11、变呢?这样你就需要修改你的应用代码。2021/3/911 下面稍微介绍一下关于bean的范围化:注意到了scope=“singleton”,这是Spring2.0新增的功能,也就是spring范围化。在Spring2.0+中,默认所有的Bean都是单一的,也就是scope=singleton方式。如果是单实例bean,这里的 scope=singleton可以省略不写。在2.0之前的版本,只能设置的singleton属性为true或false,不能进行更多的扩展。以下是Spring2.0+范围化规则列表,在开发时,可供参考:vSingleton:定义 Bean的范围为每个Spring容器一个实

12、例,默认是这种情况。vPrototype:允许Bean可以被多次实例化(相当于new的作用)。vRequest:定义Bean的范围是HTTP请求。只有在使用有WEB能力的SPRING上下文(SPRING MVC)时才有效。vSession:定义Bean的范围是HTTP请求。只有在使用有WEB能力的SPRING上下文(SPRING MVC)时才有效。vGlobal-session:定义Bean的范围是全局HTTP会话。只有在portlet上下文中才有效。总之,对singleton和 prototype的通俗理解可以如下描述:如果一个bean是prototype的,并且这个bean要被注入到其它b

13、ean或者你通过getBean这样的方式获得这个bean的时候,spring容器会创建一个新的实例给你。singleton模式指的是对某个对象的完全共享,包括代码空间和数据空间,也就是说,singleton会让所有线程共享他的成员变量。prototype则不会这样。此外singleton的生命周期由容器来管理,但是prototype的生命周期得你自己管理。2021/3/912Aspect Oriented Programming(AOP)是近来非常热门的一个话题。AOP,很多都译作“面向方面编程”。其实,译成“面向切面编程”更来得合适,AOP的本意,是在针对业务处理过程中的切面进行切入、提取,

14、它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果,使之真正意义上做到对象或对象之间的耦合。在我们开发基于WEB的JAVA应用中,AOP随处可见,比如我们常用的权限管理,登录用户的session是否超时判断,还有大家时常会碰到的数据库事务管理,都会涉及到AOP的概念和行为。如下就是我们常用的数据库事务管理的一个典型AOP配置。【题外话:Spring提供的事务AOP,是从服务层织入控制的,而不是在DAO层,这个需要注意。】AOP介绍2021/3/913在AOP中,有如下几个核心的概念:v切面(Aspect):用程序简单的语言描述,即是需要被管理的类。切面的隔离,

15、降低了耦合性,我们就可以在不同的应用中将各个切面组合使用,从而使得代码可重用性大大增强。v连接点(JoinPoint):程序运行过程中的某个阶段点。如某个方法调用,或者某个异常被抛出。v处理逻辑(Advice):在某个连接点所采用的处理逻辑。处理逻辑的调用模式通常有以下几种:前三种是我们最常用的调用模式。Before(之前):仅在连接点之前插入预处理过程After-returning(返回后)After-throwing(抛出后):在连接点抛出异常时进行异常处理Around(周围):在连接点前后插入预处理过程和后处理过程,其相当于是前面三种的结合。在Spring里,周围通知是由开源项目AOP

16、Alliance提供的MethodInterceptor接口实现.Introduction(引入)v切点(PointCut):一系列连接点的集合,它指明处理方式(一系列连接点的集合,它指明处理方式(Advice)将在何时被触发。)将在何时被触发。在Spring中,对AOP的支持都是基于代理的。代理类封装了目标BEAN,截取被通知的方法调用,再把这些调用转发到真正的目标BEAN。如何来理解这句话呢?Spring生成代理类的方式有2种,如果目标BEAN实现的是一个接口,SPRING会使用JDK的java.lang.reflect.Proxy类,它允许Spring动态生成一个新类来实现必要的接口、织

17、入任何通知、并且把对这些接口的任何调用都转发到目标类。如果目标类不是实现一个接口,Spring就使用CGLIB库生成目标类的一个子类。在创建 这个子类时,Spring织入通知,并且把对子类的调用委托到目标类。这里需要注意,被标识为final的方法是不能被通知的。因为Spring为目标类创建一个子类,需要被通知的任何方法都会被覆盖并被织入通知,这对final类型的方法是不可能的。以上这些纯粹的语言描述,很难让人理解和信服。接下来,我们通过一个实际的例子,来说明AOP强大的功能。【刚好在设计RHM3的功能:表单操作日志功能设计方案,里面恰巧要用AOP】2021/3/9142021/3/915我们现

18、在就来看看AopImpl这个类,这是个纯POJO,可以发现,这个类并没有和任何的业务对象进行绑定,最多也只是通过DI的形式,注入了一些所需要的bean。但通过以上的配置,这个类却可以在正确的时间,做正确的事情。【这里也可以发现,我并没有通过Context.getBean(“beanID”)来获取相应的bean实例。】2021/3/9162021/3/917众所周知,在接大多数应用开发中,都脱离不了数据库概念。数据库持久化技术,是一个非常常见且常用的一个技术话题,在早期开发的代码中【没有spring 框架提供】,如下的代码片段是我们非常熟悉的:数据库持久化介绍2021/3/918上面的代码,大致

19、实现了数据库一条实体记录的修改。通过对如上代码的分析,发现一个现象:为了执行一个SQL语句【stmt.executeUpdate(“UPDATE user SET age=18 WHERE id=erica”);】,我们必须编写其余可以重复、且和业务无关的代码,并且,这样的代码还会在系统其他地方(也许是每个需要数据库访问的地方)重复出现。于是,大家开始寻找一些设计模式以改进如此的设计,Template模式的应用是其中一种典型的改进方案:让公用代码尽可能抽取,开发者只关心自己业务有关的SQL编写。比如,可以将如上的代码精简到如下这2行:这就是spring带给我们的好处。Spring提供了一组数据

20、访问框架,集成了多种数据访问技术,用户可以灵活选择JDBC、Hibernate、JPA、iBatis等任意一个持久化框架,实现数据库的访问。选择Spring提供的模板技术,可以让开发者消除数据持久化代码中的麻烦,特别是在事物控制时,使用这样的模板,会带给开发者事半功倍的效果。首先,我们就来看看Spring给我们提供的多个数据库访问模板,分别适用于不同的持久化机制。注意:绿色背景是我们开发中常用的一些模板类。2021/3/9192021/3/920使用如上的模板,我们只需要在Spring上下文里配置相应的dataSource的Bean,然后把它织入到程序的DAO层即可。【回顾DI介绍章节中的例子

21、】2021/3/921这样,以JDBC模板为例,在我们的DAO实现类中:SampleDAO,核心的代码如下:public class SampleDAO implement SampleDaoService private DataSource dataSource;public void setDataSource(DataSource dataSource)this.dataSource=dataSource;/业务方法public void insertUser(RegisterInfo regInfo)JdbcTemplate jt=new JdbcTemplate(dataSourc

22、e);jt.update(insert into users(username)values(tester););虽然直接织入模板很不错,很传统的JDBC代码相比,已经大大减少了代码量。但是,Spring提供了比如上更方便的一组DAO基类,可以用于管理模板:2021/3/9222021/3/923这样,以JDBC模板为例,在我们的DAO实现类中:SampleDAO,核心的代码如下:public class SampleDAO extends JdbcDaoSupport implement SampleDaoService /业务方法public void insertUser(Registe

23、rInfo regInfo)this.getJdbcTemplate().execute(insert into users(username)values(tester););2段代码比较之后,会发现使用JdbcDaoSupport 后,基类会去管理模板了。我们不需要通过JdbcTemplate jt=new JdbcTemplate(dataSource);数据源来主动获取模板,更加简化了代码。在应用上下文配置文件中,XML的配置文件一样,只需要注意一个dataSource实现即可。L/O/G/O2021/3/924谢 谢!2021/3/925放映结束 感谢各位的批评指导!谢谢 谢!谢!让我们共同进步

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!