收藏 分享(赏)

Spring笔记.doc

上传人:HR专家 文档编号:6617333 上传时间:2019-04-18 格式:DOC 页数:18 大小:115.50KB
下载 相关 举报
Spring笔记.doc_第1页
第1页 / 共18页
Spring笔记.doc_第2页
第2页 / 共18页
Spring笔记.doc_第3页
第3页 / 共18页
Spring笔记.doc_第4页
第4页 / 共18页
Spring笔记.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、1chapter01 Spring 简介一、Spring 是什么?在了解 Spring 之前,我们来了解在 Java EE 框架下企业级开发采用 EJB 框架的一些不足:(1) EJB 太笨重,而且 Entity EJB 不能脱离容器(2) 企业级服务使用困难(3) 开发的复杂度太高(4) 侵入式方案,EJB 要使用特定的接口因此,Spring 应运而生。Spring 是一个开源的用于简化采用 Java 语言开发企业级程序的一个分层的框架。关于程序的分层结构:1、Presentation layer(表示层)(1) 表示逻辑(生成界面代码)(2) 接收请求(3) 处理业务层抛出的异常(4) 负

2、责规则验证(数据格式,数据非空等)(5) 流程控制2、Service layer(服务层/业务层)(1) 封装业务逻辑处理,并且对外暴露接口(2) 负责事务,安全等服务3、Persistence layer(持久层)(1) 封装数据访问的逻辑,暴露接口(2) 提供方便的数据访问的方案(查询语言,API,映射机制等)Domain layer(域层)(1) 业务对象以及业务关系的表示(2) 处理简单的业务逻辑(3) 域层的对象可以穿越表示层,业务层,持久层二、Spring 的作用为什么要使用 Spring?(1) 简化企业级开发 封装了大部分的企业级服务,提供了更好的访问这些服务的方式 提供了 I

3、OC,AOP 功能的容器,方便编程(2) 遵循 Spring 框架的应用程序,一定是设计良好的,针对接口编程,这样就简化了企业级程序的设计。(3) Spring 的组成 Spring Core:核心容器, BeanFactory 提供了组件生命周期的管理,组件的创建,装配,销毁等功能SpringContext:ApplicationContext,扩展核心容器,提供事件处理、国际化等功能。它提供了一些企业级服务的功能,提供了 JNDI,EJB,RMI 的支持。 Spring AOP :提供切面支持 Spring DAO:提供事务支持,JDBC,DAO 支持 Spring ORM:对流行的 O/

4、R Mapping 封装或支持2 Spring Web:提供 Web 应用上下文,对 Web 开发提供功能上的支持,如请求,表单,异常等。 Spring Web MVC:全功能 MVC 框架,作用等同于 Struts。chapter02 Spring 的 IoC一、IoC 的概念IoC,Inversion of Control,控制反转。对象的协作关系由对象自己负责。依赖注入:对象的协作关系有容器来建立。二、IoC 的类型(1) 基于特定接口(侵入式方案)(2) 基于 set 方法(3) 基于构造器三、Spring 容器Spring 容器负责生成、组装、销毁组件,并负责事件处理、国际化等功能。

5、(1) BeanFactory 核心容器,负责组件生成和装配 实现主要包括 Xml BeanFactory(2) ApplicationContext(3) WebApplicationContext(4) 四、IoC 的使用Resource:interface,用来包装资源xmlBeanFactory:BeanFactory 的一个实现,使用 Resource 对象来查找配置文件BeanFactory.gerBean(“BeanId ”):取得以参数命名,或者 Id 等于参数值的一个 Bean实例。BeanFactory(容器)在默认情况下,会采用单例方式返回对象。容器只到调用 getBea

6、n方法时,才会实例化某个对象。(1) Spring 可以采用 XML 或者 .properties 文件作配置(2) 配置文件(XML)根元素可以有多个子元素,每个代表一个需要装配的对象。1、setter 注入(1) 注入简单属性(String 和 8 中基本类型)parameterValue对于基本类型,Spring 容器会自动作类型转换,以便赋值。(2) 注入对象3A、让 Spring 容器在当前配置文件中找到相应的 Bean,并调用 set 方法,注入该 Bean。B、将一个 Bean 的定义嵌套在另一个 Bean 中(可读性差) ,被嵌套的 Bean 不能采用getBean()返回C、

7、采用搜索多个配置文件来注入(3) 注入集合类型 SetSet 中存放字符串,对象,集合,不允许重复 ListList 中可以放入字符串,对象,List MapMap 有子元素来存取 key,value ,key 只能为 String PropertiesProperties 有子元素2、consctructor 注入如果 Bean 属性不多,并且属性值必须要注入才能使用,则应该采用 constructor 注入,其他情况就要 set 方法注入。装配关系检查(Dependency checking)simple:检查简单类型ojects:检查对象类型all:检查所有自动装配(Autowring

8、Properties)装配方式:byName,byType,autodetect ,constructorautowire=“byName”:按照名称匹配按照 Bean 的 Id 与属性的名称进行匹配自动装配与手动装配可以结合使用,手动装配会覆盖自动装配。autowire=“byType”:按照类型匹配要注入的属性类型与配置文件中的 Bean 类型匹配的个数超过一个,会出错。autowire=“antodetect”:先按照 construct,后按照 byType。autowire=“constructor”:先去匹配构造器中参数类型,后与配置文件中的 Bean 类型匹配。3、比较两种注入方

9、式4关于自动匹配:优点:快速开发缺点:依赖关系不清楚,易出错,不易维护。自动匹配的应用场合:(1) 构建系统原型(2) 与依赖关系检查(Dependency-check)结合使用(3) 自动装配与手动装配结合4、特殊的 IoC 后处理 Bean 接口:org.springframework.beans.factory.config.BeanPostProcessorSpring 已经实现该接口的 BeanPostProcessor(不用再注册 )ApplicationContextAwareProcessor:把应用上下文传递给所用实现了 ApplicationContextAware 接口的

10、 BeanApplicationContextAware 接口使用举例,可参照事件监听机制DefaultAdvisorAutoProxyCreator 自动对 Bean 应用切面 Bean 工厂后处理 (只能在应用上下文中使用)接口:org.springframework.beans.factory.config.BeanFactoryPostProcessorSpring 内部接口实现:org.springframework.beans.factory.config.PropertyPlaceholderConfigurer属性编辑 org.springframework.beans.fac

11、tory.config.CustomEditorConfigurerCustomerInfo(“fname-lname-address“) 实例工厂配置代码:-奥迪 A8800000.0-静态工厂配置-5奥迪 A8800000.0-5、事件处理事件监听1)自定义事件,通过继承 org.springframework.context.ApplicationEvent2)自定义监听器,实现 org.springframework.context.ApplicationListener,并注册3)发布事件,为得到应用上下文,必须实现 org.springframework.context.Appli

12、cationContextAware 接口chapter03 Spring 的 AOP一、AOP(Aspect-oriented programming,面向切面编程):什么是 AOP?定义:将程序中的交叉业务逻辑提取出来,称之为切面。将这些切面动态织入到目标对象,然后生成一个代理对象的过程。二、AOP 核心概念1、Aspect (切面)切面,是对交叉业务逻辑的统称。2、Joinpoint(连接点)连接点,指切面可以织入到目标对象的位置(方法,属性等) 。3、Advice(通知)通知,指切面的具体实现。4、Pointcut(切入点)切入点,指通知应用到哪些类的哪些方法或属性之上的规则。5、In

13、troduction(引入)引入,指动态地给一个对象增加方法或属性的一种特殊的通知。6、Weaving (织入)织入,指将通知插入到目标对象。7、Target (目标对象)目标对象,指需要织入切面的对象。8、Proxy(代理对象)代理对象,指切面织入目标对象之后形成的对象。三、Spring AOP 原理采用动态代理模式。6Spring AOP 采用动态代理的过程:(1) 将切面使用动态代理的方式动态织入到目标对象(被代理类) ,形成一个代理对象;(2) 目标对象如果没有实现代理接口,那么 Spring 会采用 CGLib 来生成代理对象,该代理对象是目标对象的子类;(3) 目标对象如果是 fi

14、nal 类,并且也没实现代理接口,就不能运用 AOP。四、Spring 的通知1、Spring 的通知类型(1) MethodBeforeAdvice类全名:org.springframework.aop.MethodBeforeAdvice在方法调用之前,做处理。不能够改变返回值不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)(2) AfterReturningAdvice类全名:org.springframework.aop.AfterReturningAdvice 在方法调用之后,做处理。不能够改变返回值不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)

15、(3) MethodInterceptor类全名:org.aopalliance.intercept.MethodInterceptor在方法调用之前以及之后,做处理。可以改变返回值,也可以改变流程。(4) ThrowsAdvice类全名:org.springframework.aop.ThrowsAdvice在方法抛出异常后,做处理。当该通知处理完异常后,会简单地将异常再次抛出给目标调用方法。2、配置过程:(1)配置目标对象(2)配置通知(3)利用 ProxyFactoryBean 将通知织入到目标对象,形成一个动态代理对象(4)客户端使用动态代理来访问目标对象的方法。在默认情况下,通知会应

16、用到所有的方法之上。Pointcut:根据方法和类决定在什么地方织入通知Advisor:将 Pointcut 与 Advice 结合到一起。自定义切入点:步骤:1)实现 org.springframework.aop.ClassFilter2)实现 org.springframework.aop.MethodMatcher73)实现 org.springframework.aop.Pointcut4)实现 org.springframework.aop.PointcutAdvisor注意:在此可定义private Advice advice;private Pointcut pointcut;

17、在配置文件中,将自定义的切入点与通知绑订到一起5)利用 ProxyFactoryBean 将 advisor 织入到目标对象ProxyFactoryBean 的作用:依照配置信息,将切面应用到目标对象,生成动态代理对象。(1) Spring 只支持方法连接点,不支持属性连接点。(原因是 Spring AOP 采用的是动态代理模式,而动态代理本身就是在方法调用前加入代码。 )(2) Spring 只在运行时,将切面织入到目标对象。(有些 AOP 实现,可以在编译是织入切面到目标对象。 )Injecting Advice(cont d)目标对象实现的接口(如果没有定义接口,则所有方法使用 CGLi

18、baop.RegisterService目标对象需要织入到目标对象的切面logAdvicethrowsAdvice五、切入点(Pointcut)1、Pointcut切入点是指通知/切面可以应用到哪些类,哪些方法之上。Pointcut APIPointcut:org.springframework.aop.Pointcut对某些类某些方法应用切面。Classfilter:org.springframework.aop.ClassFilter用来过滤类(哪些类可以应用切面)MethodMather:org.springframework.aop.MethodMatcher用来过滤方法(类中哪些方法

19、应用切面)Advisor:org.springframework.aop.PointcutAdvisor将 Pointcut 与 Advice 结合到一起8配置文件样例:myPointcutAdvisor2、预定义切入点 静态切入点:a、NameMatchMethodPointAdviosrorg.springframework.aop.support.NameMatchMethodPointcutAdvisor根据方法名称的特点进行匹配核心 XML:mappedNameadvice(ref)配置文件样例:methodOne9namedPointcutAdvisorb、RegexpMethod

20、PointcutAdvisor根据正则表达式匹配方法名org.springframework.aop.support.RegexpMethodPointcutAdvisor核心 XML:patternadvice(ref)配置文件样例:.*method.*regexpAdvisor10 动态切入点:org.springframework.aop.support.ControlFlowPointcut 切入点的交叉与合并:Pointcuts.union配置文件样例: Introduction一种特殊类型的 Advice,为类动态增加方法和属性。编程步骤:1)实现 org.springframew

21、ork.aop.IntroductionInterceptor 或继承 org.springframework.aop.support.DelegatingIntroductionInterceptor2)使用 org.springframework.aop.support.DefaultIntroductionAdvisor配置文件样例:aop8.OtherBean六、自动代理Spring 在生成代理对象的时候,默认情况下,会使用被代理对象的接口来生成代理对象。如果被代理对象没有实现接口,此时,Spring 会使用 CGLIB 生成代理对象,此时该代理对象是被代理对象的子类。11a、Bean

22、NameAutoProxyCreatororg.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator根据类的名称来为符合相应名称的类生成相应代理对象。beanNames(list),interceptorNames配置文件样例:someServiceotherServicelogAdviceb、DefaultAdvisorAutoProxyCreatororg.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator自动将 Adviso

23、r 与匹配的 Bean 进行绑定只能与 Advisor 配合使用配置文件样例:chapter04 Spring 对持久层的支持Spring 对持久层的支持: JDBC, O/R Mapping (Hibernate,TopLink 等)一、Spring 对持久层支持采用的策略:1、Spring 对持久层“不发明重复的轮子 ”,即没有重新实现新的持久层方案,对现有持久层方案做封装,更利于使用。2、采用 DAO 模式3、提供了大量的模板类来简化编程(HibernateDaoSupport,JdbcTemplate 等)4、重新设计了一套完善的异常体系结构 类型丰富,细化异常类型 全都是运行时异常(

24、RuntimeException)二、Spring 对 JDBC 的支持1、配置数据源方式一:采用 Spring 内置的数据源, Spring 内置实现 DriverManagerDataSource12com.mysql.jdbc.Driverjdbc:mysql:/localhost:3306/hibdbrootwindows方式二:采用开源数据库产品如 DBCPDBCP 提供的 BasicDataSourcecom.mysql.jdbc.Driverjdbc:mysql:/localhost:3306/hibdbrootwindows方式三: 直接使用容器提供的数据源(如 Tomcat,

25、Weblogic ,Sun Application Server)JNDI 数据源:(mysql5,tomcat5.5)step1:在 server.xml 中:step2:在 context.xml 中(confcontext.xml):13step3:在 beans-config.xml:java:comp/env/jdbc/mydatasource2、配置 JdbcTemplate 模板类(封装了绝大多数数据库操作)3、配置 DAO4、配置 Service编程步骤:step1: 配置数据源step2: 配置 JdbcTemplatestep3:配置 DAO注意: 查询时,使用 RowMa

26、pper三、Spring 对 Hibernate 的支持Step1: 配置数据源Step2: 配置 sessionfactorylab6/Order.hbm.xmlorg.hibernate.dialect.MySQLDialecttrue14Step3: 配置 DAO注意:以上配置是要求 dao 继承 HibernateDaoSupportchapter05 Spring 对事务的支持一、AOP 事务的含义:事务当作一个切面,动态地织入到目标对象,形成一个代理对象。二、Spring 的事务机制Spring 支持声明式事务。Spring 使用事务服务代理和事务管理器(如 HibernateTr

27、ansactionManager)来支持事务服务。Spring 对事务的边界多了一种嵌套事务( PROPAGATION_NESTED) 。PROPAGATION_NESTED:如果客户端启动了事务 T1,那么 Bean 启动一个嵌套在 T1 中的子事务 T2;如果客户端没有启动事务,那么 Bean 会启动一个新的事务,类似于REQUIRED_NEW三、Spring 中事务的使用1、Spring 中使用 Hibernate 事务Step1:配置数据源Step2:配置 sessionfactory (同上)Step3:配置事务管理器Step4:创建事务服务代理lab7.SaleService15P

28、ROPAGATION_REQUIRED事务属性描述格式:传播行为,隔离级别,只读事务(read-only),回滚规则在默认情况下,Spring 的容器对于非受查异常(服务模块中抛出的非受查异常) ,会回滚事务。对于受查异常,会提交事务。如果即使发生了某种受查异常,也要回滚事务,可以用 “- 异常类型“来声明。同样,对于非受查异常,如果不要求回滚事务,可以用“+ 异常类型“ 来声明。如何简化事务配置?使用继承(抽象的 Service 类) 、自动代理。四、Spring 事务与 EJB 事务1、EJB 事务:EJB 的 CMT 管理事务方式,只能设置事务边界(传播行为) ,对于隔离性是不能设置的,

29、并且 EJB 不支持嵌套事务。2、Spring 事务:对于 Spring 来说, Spring 的声明式事务可以设置事务边界(传播行为) ,设置隔离级别,设置只读事务,回滚规则(+:对于任何异常都提交,- :对于任何异常都回滚)+异常类型 1,-异常类型 2PS:Spring 对嵌套事务的支持依赖与数据库底层对嵌套式事务的支持。chapter06 SSH 整合一、SSH:Struts(表示层)+Spring (业务层)+Hibernate (持久层)Struts:Struts 是一个表示层框架,主要作用是界面展示,接收请求,分发请求。在 MVC 框架中,Struts 属于 VC 层次,负责界面

30、表现,负责 MVC 关系的分发。(View:沿用 JSP,HTTP, Form,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)Hibernate:Hibernate 是一个持久层框架,它只负责与关系数据库的操作。16Spring:Spring 是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。 Web 分层架构中业务层为什么都选择 Spring?Service 层需要处理业务逻辑和交叉业务逻辑,处理事务,日志,安全等,而这些与Spring 的 IoC,AOP 等不谋而合。 Web 分层架构中,对于

31、各层技术的采用应该遵循一个怎样的标准?1、选择发展成熟的技术:A、经过了项目实践证实可行性良好B、文档完善C、技术一直处于可持续发展更新2、Web 应用中对于技术的选择有赖于开发人员的技术掌握情况二、Spring 与 Struts 整合前提:必须在 Web 应用启动时,创建 Spring 的 ApplicationContext 实例方式:1、采用 ContextLoaderListener 来创建 ApplicationContext:contextConfigLocation/WEB-INF/spring-config/applicationContext.xmlorg.springfra

32、mework.web.context.ContextLoaderListener2、采用 ContextLoaderPlugIn 来创建 ApplicationContext或者:通过 listener 装载 spring 应用上下文方式一:通过 Spring 的 ActionSupport 类ActionSupport 类:知道 ApplicationContext 的获得方式。步骤:1、Action 直接继承 ActionSupport2、使用 ApplicationContext ctx = getWebApplicationContext();取得 Spring 上下文3、取得相应 B

33、ean注意:有可能需要替换 commons-attributes-compiler.jar 包。优点:简单17缺点:耦合高违反 IOC无法使用多方法的 Action方式二:通过 Spring 的 DelegatingActionProxy 类步骤:1、Action 中,使用 IOC 获得服务2、配置 struts-config.xml3、在 Spring 配置文件中注意,要用 bean name 命名。/somepath:Action 的 path优点:不使用 Spring api 编写 Action利用了 IOC 装配。可以利用容器的 scope=“prototype“来保证每一个请求有一个

34、单独的 Action 来处理,避免 struts 中 Action 的线程安全问题。缺点:struts 配置文件中,所有 path 都映射到同一个代理类方式三:通过 Spring 的 DelegatingRequestProcessor 类步骤:1、Action 中,使用 IOC 获得服务2、配置 struts-config.xml3、在 Spring 配置文件中小结:Spring 与 Struts 整合方式只有两种:(1)由 Spring 容器来管理 Action(方式二,方式三)(2)Action 处于容器之外(方式一)注意:中文问题:设置过滤器,设置页面编码,数据库编码三、关于 Spri

35、ng 与 EJB1、Spring 与 EJB3.0 的对比18Spring 与 EJB3.0 之间的关系是竞争关系。 Spring 是一个开源的框架,而 EJB3.0 是一个标准(标准意味着将得到广泛的支持以及良好的兼容性) ,并且,采用 EJB3.0,项目的后期维护得到了保证。 Spring 是一个轻量级框架, EJB3.0 是一个重量级框架(完整的容器,包含所有的服务)。 Spring 的 IoC,AOP 集成了大量的开源框架,可扩展性良好。EJB3.0 的可扩展性则完全依赖于新的容器。 Spring 对事务支持不如 EJB3.0 成熟,Spring 对集群的兼容也不够。 Spring 与 EJB3.0 都是一个企业级开发框架,都支持声明式事务。2、Spring 的优势与劣势Spring 的优势: 简化了企业级开发(对企业级服务进行了进一步的封装) 采用 Spring 框架的程序意味着良好的分层结构设计,并保证是面向接口编程的 用 IoC,AOP 容器,模块是可配置的,松耦合的,方便了后期维护Spring 的劣势: 配置复杂,不方便维护 容器大量使用反射等机制装配对象,影响性能,对于高并发的大型应用无能为力。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报