- 浏览: 156020 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
驭乐MJ:
好!谢谢啦!正在学习使用sean中。。
Seam学习笔记 -
laorer:
00 -现在,互联网造就了一批富翁,但那时,似乎什么都不会去想 ...
如果时光能够回流到八年前 -
liuqizhi0925:
八年前,OMG ,能改变的事情真的很多...
如果时光能够回流到八年前
Spring笔记
0. 背景
Spring Framework从诞生之日起,受到了越来越多的关注。最近,新的开源项目大多支持Spring Framework。国内目前也有专门的网站(http://spring.jactiongroup.net/)。那它为什么如此受欢迎呢?
我想最重要的是,EJB让每个人都痛恨。要编写一个EJB,需要写LocalHome, RemoteHome, Bean, LocalInterface, RemoteInterface,需要一个标准描述符,一个特殊厂商描述符(Weblogic、WebSphere都不一样),如果是Entity Bean,还需要Mapping文件。如此之多,实在麻烦。但EJB最重要的是解决Transaction问题,没有Spring之前,没有其他方法能够描述式的解决它。每个人、每个公司为了解决Transaction的问题,编程的写法都不一样,百花齐放。于是,在最需要它的时候,Spring出现了。
Spring Framework
Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。
1. IoC容器,Bean工厂
简单地讲,bean就是由Spring容器初始化、装配及被管理的对象,除此之外,bean就没有特别之处了。IoC容器不仅限于管理JavaBean(具有默认的(无参)构造器及setter和getter方法),它可以管理任意的类。需要用到外部配置的地方通通由我spring来管理。
尽量使用spring的模板技术(即bean的继承)。
根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
2. Spring的事务管理
Spring的事务管理分为编程式的事务管理和声明式的事务管理。
㈠编程式的事务管理
(1)直接使用PlatformTransactionManager进行手动的commit和rollback
(2)利用TransactionTemplate
㈡声明式的事务管理
声明式的事务管理跟Spring的AOP实现一样分为两种:①ProxyFactoryBean ②自动代理
(1) ProxyFactoryBean
使用TransactionProxyFactoryBean(org.springframework.transaction.interceptor.TransactionProxyFactoryBean)为目标bean生成事务代理的配置。它必须为每一个bean都配置一个事务代理的bean。利用模板可以简化配置。
(2) 自动代理——有3种方式
① 使用BeanNameAutoProxyCreator(org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator),利用spring的aop框架配置事务代理。不需增量式配置。这种配置方式其实是依赖spring提供的bean后处理器。
② DefaultAdvisorAutoProxyCreator。同样不需增量式配置,可读性不如前者。
③ 通过annotation来实现。将所有具有@Transactional(在org.springframework.transaction.annotation的package下)注解的Bean自动配置为声明式事务支持。
在配置文件中需要用到 <tx:> 或者<aop:>命名空间
3. Spring与Struts的整合
如果整个项目与Spring进行整合,可以将Spring理解为一个性能优秀的大工厂,管理所有的bean,包括DAO组件,业务组件,还包括Struts的Action组件。跟Struts进行整合时,可以利用Spring的Ioc特性。在Struts中配置org.springframework.web.struts.ContextLoaderPlugIn。加载Spring配置文件。同时利用DelegatingRequestProcessor(org.springframework.web.struts.DelegatingRequestProcessor,该类继承自Struts的RequestProcessor类),将action的请求转发到由Spring管理的action bean去处理。这样在所有的java代码中就不需要显式调用Spring的Context来获取bean。
Spring跟webwork的集成由WebWork框架提供,跟struts2的集成也是由struts2框架提供的(加入struts2-spring-plugin-2.0.11.jar)。
4. Spring提供了几种Resource的实现
在Spring的XML配置文件中,注入的Resource资源总是有一个字符串来表示的.Spring根据字符串(例如classpath:config.xml或者http://java.sun.com或者file:///c:/windows/或者直接的test.txt)来判断应该如何创建相应的Resource。
最常用的Resource实现是:
(1)UrlResource
(2)ClassPathResource
(3)FileSystemResource
5. 有了Spring,可以让接口应尽量最小化这一特性得到充分发挥。
6. Spring Framework拥有自己的AOP框架,这个框架在概念上是十分容易理解的,而且它成功地实现了在Java企业级开发中对AOP需求的80%左右。开发手册中还描述了Spring与AspectJ的集成方法。 (当前来说,AspectJ是Java企业级开发领域中特性最多、最成熟的AOP实现。)
7. 依赖注入的高级特性:
Spring提供了3中工厂模式Bean的配置——
(1)静态工厂 XML配置中要定义factory-method
(2)实例工厂 XML配置中要定义bean实例及factory-method
(3)FactoryBean FactoryBean指的是实现了Spring的FactoryBean接口的Bean。
BeanPostProcessor使我们有能力在Spring容器对Bean初始化前后对所有的Bean进行检查和修改,而BeanFactoryPostProcessor允许我们在Spring容器对所有的Bean初始化之前对Bean的定义做修改。
Lookup方法注入。
8. 使用Spring的org.springframework.beans.factory.config.PropertyPlaceholderConfigurer,可以根据指定Porperties文件的属性值进行替换。
9. Http远程调用协议
Spring本身还提供了一个Http远程调用协议,我们暂且称之为HTTP Invoker。HTTP Invoker使用Java标准的序列化机制(因此仅适用于Java平台之间的通讯),通过HTTP协议来实现远程调用。
10. Acegi及安全
Acegi安全框架通过基于Filter的URL过滤实现了针对Web资源的保护,通过基于AOP拦截的机制实现了针对组件的方法级别的保护。这两者在实际项目中的应用都非常广泛。
JAAS(Java Authentication and Authorization Service) —— Java验证与授权服务。
11. AOP
AOP最常见的应用就在于事务管理、日志记录、权限检查这几个方面(也称为切面,Aspect)。这些系统级关注点非常容易通过AOP实现横切。
AOP并非一种全新的技术,他仅仅是使用了更简单的、更优雅的设计来实现传统的Proxy、Decorator等模式。
在Spring中,如果针对接口的代理(推荐的也是默认情况下),则采用JDK动态代理机制来实现AOP。如果针对具体类的代理,则将使用CGLIB运行时的动态字节码生成技术来实现AOP。
Spring的AOP实现有两种:①ProxyFactoryBean ②自动代理
一. ProxyFactoryBean是利用org.springframework.aop.framework.ProxyFactoryBean,注入目标对象,然后生成AOP代理。
二. Spring的自动代理实际上是由BanPostProcessor实现的。在容器载入XML配置之后,将所有需要实现代理的目标Bean全部修改为代理Bean,而id不变。这样客户端就无法直接直接访问目标Bean了。
Spring提供了几种常用的AOP的自动代理:
1)BeanNameAutoProxyCreator (org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator)
2)DefaultAdvisorAutoProxyCreator(org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator)
3)通过AspectJ的annotation来配置(@Aspect @Pointcut @Before 等标注)
12. AOP的一些常用术语:
Aspect—— 切面,或称系统的关注点。例如安全检查、日志记录、事物控制。在AspectJ的annotation中(在org.aspectj.lang.annotation的package下),可以将一个实现处理该系统关注点的类标注上@Aspect.(例如LoggerAspect),和直接实现Advice接口来实现一个类对应一种Advice不同,一个切面类可以包含多个Advice和Pointcut,每个Advice和Pointcut都是由一个独立的方法加上特定的annotation来表示。
Pointcut—— 切入点。一般是描述织入目标对象的哪些连接点。例如通过通配符insert*来描述织入业务实现类的insert开头的方法。在AspectJ的annotation中可以通过类似
@Pointcut("execution(* example.chapter4.UserService.login(..))")
来描述Pointcut.
Advice—— 可译为增强。常见的有BeforeAdvice,AfterReturningAdvice,ThrowsAdvice等。本质上就是一个拦截器,可以拦截方法调用,然后执行自己的一段代码来增强应用程序的逻辑。AspectJ的annotation中,有@Before,@AfterReturning,@AfterThrowing,@Around等标注在具体执行增强的方法标注上。
Interceptor——Spring所定义的。Interceptro(拦截器),是Advice的一种实现。常见的有MethodInterceptor,ConstructorInterceptor.
Advisor—— Spring所定义的。Advisor必须包含一个Advice。而常用的PointcutAdvisor包含一个Advice还有一个Pointcut.
Weaving—— 动作。就是说将切面整合到程序的执行流程中。
13. 在Java平台上,对于AOP模块的织入,有3种方式:
1、运行时织入-即在java运行的过程中,使用Java提供代理来实现织入。根据代理产生方式的不同,运行时织入又可以进一步分为J2SE动态代理及动态字节码生成两种方式。由于J2SE动态代理只能代理接口,因此,需要借助于一些动态字节码生成器(例如CGLIB)来实现对类的动态代理。大多数AOP实现都是采用这种运行时织入的方式,包括Spring。
2、类加载器织入-指通过自定义的类加载器,在虚拟机JVM加载字节码的时候进行织入,比如AspectWerkz(已并入AspecJ)及JBoss就使用这种方式。
3、编译器织入-使用专门的编译器来编译包括切面模块在内的整个应用程序,在编译的过程中实现织入,这种织入是功能最强大的。编译器织入的AOP实现一般都是基于语言扩展的方式,即通过对标准java语言进行一些简单的扩展,加入一些专用于处理AOP模块的关键字,定义一套语言规范,通过这套语言规范来开发切面模块,使用自己的编译器来生成java字节码。AspectJ主要就是是使用这种织入方式。
14. Spring跟Servlet的结合
通过在web.xml中定义servlet——org.springframework.web.servlet.DispatcherServlet。便可以通过实现org.springframework.web.servlet.mvc.Controller接口来定义简便的Servlet Bean。
发表评论
-
Weblogic的update和stop/start的区别
2009-10-28 19:50 2177Weblogic的update和stop/s ... -
Web Service HTTP1.0 and HTTP1.1性能测试报告
2009-10-21 17:55 3107第1章 测试需求分析 1.1 测试目的 w ... -
SOA与业务敏捷
2006-08-30 00:00 826作者:TIBCO中国研发中心 胡长城(银狐999) ... -
RESTful Web Services
2006-08-23 00:00 9711. The Fundamental 1.1 What ... -
CAS学习笔记
2006-08-02 00:00 1255•相关文档 官方文档: http://www.ja- ... -
SOA学习笔记
2006-07-26 00:00 933SOA是为了解决在Internet ... -
Lucene 基础指南[转]
2006-07-12 00:00 1282Lucene 基础指南 作者:lighter, 江南白衣 ... -
OSGi入门笔记
2006-07-05 00:00 978借助网上的一些资料,对OSGi有了一些了解,将到目前的一些粗浅 ... -
x509数字证书介绍
2006-06-28 00:00 1304一、什么是数字证书 数字证书就是互联网通讯中标志通讯各方身 ... -
SSL协议及其应用
2006-06-21 00:00 2105SSL协议及其应用 ... -
JSR 168与WSRP
2006-06-07 00:00 1603作者:Rachel Greenblatt ... -
JBoss学习笔记
2006-05-31 00:00 1366JBoss架构是由JMX MBean服务器、微内核组成的。 ... -
UDDI笔记
2006-05-24 00:00 1092◆UDDI的目的实际上是想提供一个针对公众网商业用户的在全 ... -
选择Seam的十大理由
2006-05-17 00:00 950一、增加AJAX特征的最快捷方式 在功能上,Ajax改变了W ... -
Seam学习笔记
2006-05-10 00:00 1362FAQ: seam的英文意思是:缝、接合处。seamless ... -
JSF学习笔记
2006-05-03 00:00 2846FAQ: 1. JSF跟Spring如何结合? A ... -
iBATIS学习笔记
2006-04-19 00:00 13951. iBATIS 关于iBATIS,iBATIS是一个Da ... -
Hibernate's FAQ
2006-04-05 00:00 7881. 关于session 1) 什么时机对session ... -
Hibernate学习笔记
2006-03-29 00:00 966● 相关文档: Hibernate参考文档 v3.0.2 ... -
JMX学习笔记
2006-03-22 00:00 1004JMX 笔记 一些JMX的简单入门资料如下: ...
相关推荐
spring学习笔记
### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...
Spring学习笔记( spring视频笔记)
这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...
本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...
Spring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).doc
根据提供的压缩包文件名,我们可以推测这是一个逐步学习Spring的系列笔记。从"Spring_day1"开始,可能涵盖了Spring的基础概念、环境搭建和基本配置。"Spring_day2"可能涉及了依赖注入和AOP的深入讲解。"Spring_day3...
“Java Spring学习笔记”是一份宝贵的资源,专门为想要学习和掌握Java Spring框架的开发者而设计。这份学习笔记提供了详细而系统的教程和实践指南,帮助初学者快速入门,并带领已经有一定经验的开发者深入理解和应用...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...
"尚学堂Spring学习笔记" 本文档记录了尚学堂Spring学习笔记的重要知识点,涵盖了Spring配置文件的设置、普通属性的注入、自定义属性编辑器、公共属性的注入、Spring注解等内容。 一、Spring配置文件的设置 在...
Spring学习笔记
Spring学习笔记2涵盖了Spring框架的核心概念和重要特性,旨在帮助开发者深入理解并熟练掌握Spring的使用。 1. **依赖注入(Dependency Injection, DI)**:这是Spring最核心的设计原则,它允许对象之间的依赖关系在...
Spring学习笔记总结 Spring是一个基于Java的框架,它提供了一种简洁、灵活的方式来构建企业级应用程序。在这个笔记中,我们将总结Spring的主要概念和技术,包括IOC、AOP、MVC、Struts2和Hibernate的集成。 IOC...
在本篇Spring学习笔记中,我们将深入探讨Spring的基本概念,包括bean的配置、依赖注入、IOC容器以及Bean的实例化方式。 首先,Spring中的核心概念是bean。Bean是Spring框架中的基本构建块,它们是被管理的对象,...
这份"Spring学习笔记"涵盖了Spring框架的基础到高级应用,对于想要深入理解并掌握Spring的开发者来说是一份宝贵的资料。 1. **Spring概述**:Spring是一个开源的Java平台,主要设计用于简化企业级应用开发。它提供...
### 马士兵Spring学习笔记知识点汇总 #### 一、面向接口编程(面向抽象编程) **概念:** 面向接口编程是指在设计系统时,尽量通过接口来定义各个组件之间的交互方式,而不是直接依赖于实现类。这种方式使得系统...