`
lvwenwen
  • 浏览: 956031 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

Spring大探宝(转)

阅读更多
Spring大探宝

SpringIOCMVC框架Web
Spring是什么?初接触的人会说Spring是个ioc容器。 这个答案只能获50分!!

Spring是一个从web mvc一直到数据访问的完整程序结构体系。而且对于不同的人有不同的使用方法。让我一一道来。

最为人熟知的,Spring是一个ioc容器。这个对应Spring的org.springframework.beans包,而且这是大家用的最多的功能。我们称为BeanFacotry。其基本原理说穿了很简单,读取一堆配置,侦测出各个bean的依赖关系。然后有两部分工作,一部分是通过PropertyEditor,把配置文件中写的一些非bean数据绑定到每个bean的属性属性上(比如int,boolean,甚至map类型的属性),还有一部分是建立bean之间的相互关系。当然这两部分是同时进行,没有先后。当初作者选用的是PropertyEditor,如果放到现在可能会选用ognl。btw,这个绑定机制在spring web mvc中也有用到
如果只是使用ioc,只要知道配置文件怎么写就可以了。如果想自己写一个ioc容器可以看看这个包里的代码,特别是BeanDefinition和BeanFactory的设计非常精彩

其次Spring是一个ApplicationContext。现在Context这个词用的越来越烂,Spring的这个Context说穿了就是在BeanFactory基础上多了一些高级功能,包括

Spring reference 写道
MessageSource, providing access to messages in, i18n-style

Access to resources, such as URLs and files

Event propagation to beans implementing the ApplicationListener interface

Loading of multiple (hierarchical) contexts, allowing each to be focused on one particular layer, for example the web layer of an application

这些是一个大型程序常用的功能。不过,一旦你使用了spring的application提供的功能,那你的代码就和Spring再也脱离不了关系了。

以上是Spring的核心功能,Spring剩余的部分以ioc为手段,或以ioc为目的,向前端,后端,深层和周边范围扩展。说以ioc为手段是因为有部分功能理论上是可以脱离Spring核心功能而使用,只是用了ioc后会简化很多工作量。以ioc为目的是因为还有一部分代码就是为了把其他库拉进spring而设计。我们不妨……看过来,看过来……哦!哦!!

先说前端。Spring自带一个web mvc框架。如果拿struts作比较的话,那么strust中的formbean,action和返回的formbean,依次对应着spring mvc中的command,controllor和ModelAndView中的model。其实说穿了,现在的web mvc的主要功能都很类似,提供一种机制把用户通过http提交的数据转换成比较容易使用的形式,顺便作一些校验。然后读取某个配置文件将这些数据传送到一个控制器上。然后获取控制器返回的数据和视图名称,再找到对应的视图把这些数据和视图合并起来发回客户端。大家所比较的无非是哪个提供的附加功能多点(比如谁的验证器又多又好),配置文件哪个写起来容易点,控制器尽量不要和业务功能过于耦合,作页面尽量好看点。基本功能不会有太大的差别。谁有能力和时间的话,完全可以写个适配器,把其中的一套的某些功能适配到另一套上去。
spring的前端自有它的优势,能和ioc框架无缝整合,所有的配置统一被beanfactory读取。但是要用户spring mvc除了要学习spring之外,还要学习一到两种页面显示技术。因为spring mvc自己不带页面显示功能,默认情况下它使用的是jstl+jsp。至于spring的那套tag,我觉得纯粹是鸡肋,只是用来显示验证结果用的,并非框架核心。用不用他的那套tag纯属个人爱好。
说句题外话,现在有不少web框架要和spring集成,大多数走的是配置ContextLoaderServlet,然后用WebApplicationContextUtils.getWebApplicationContext的路子。其实说穿了也很简单。去看org.springframework.web.context.ContextLoader的代码,会找到这两句
Java代码
WebApplicationContext wac = createWebApplicationContext(servletContext, parent);;  
            servletContext.setAttribute(  
                    WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac);; 

WebApplicationContext wac = createWebApplicationContext(servletContext, parent);;
servletContext.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac);;
他就是把一个context放到了servletContext里去了。然后大家再从servletContext里拿。这样只能从web框架单向引用到managed bean,而bean用不到web里的对象。除非这些web框架能够在运行时动态向sping的ioc容器里添加自己创建的对象或者直接让spring协助创建。

转回话题
向后端是指spring同一些DAO框架进行集成。这方面spring更多的是在搭桥。比如hibernate的LocalSessionFactoryBean。这些桥搭起来后,我们可以很方便的从spring中访问这些dao框架。而这些框架对spring可以说是一无所知。此外由于dao代码的复杂性和重复性,spring还提供了一些template,来降低开发人员的工作量,简化代码。spring的这些功能可以说是大部分的体力活和小部分的脑力劳动。不过我们还是要感谢这些牛人们,他们是虽然不是“加拿大gcd员”,但是为了帮助中国的程序开发事业,即使未受“加拿大gcd和美国gcd的派遣”,还是把spring框架不远万里的带到中国。

向深层方向发展是指spring的aop和transaction功能。这些功能的基本原理就不说了。虽然未必是spring独有的,但这些实现都是spring作者亲自设计的。可以说是他们的“自主知识产权”。我可不希望有xx人看到这些代码拿倒自己的公司然后打上copyright。我肯定会找这种人拼命的 。这些功能其实和ioc一点关系都没有。而且spring的reference里也说可以"programmatically"的。比如
Java代码
ProxyFactory factory = new ProxyFactory(myBusinessInterfaceImpl);;  
factory.addInterceptor(myMethodInterceptor);;  
factory.addAdvisor(myAdvisor);;  
MyBusinessInterface tb = (MyBusinessInterface); factory.getProxy 

ProxyFactory factory = new ProxyFactory(myBusinessInterfaceImpl);;
factory.addInterceptor(myMethodInterceptor);;
factory.addAdvisor(myAdvisor);;
MyBusinessInterface tb = (MyBusinessInterface); factory.getProxy
这些功能处于不用ioc也可以跑,不过用了ioc用起来更方便的位置。如果谁在这方面有兴趣也可以翻翻spring代码。比如要写一个简单的事务管理器,就可以去看spring的各种TransactionManager的实现。当然真正的回滚递交机制的实现这些代码帮不上忙的。

最后说说周边扩散。这表现在两方面,一方面是spring内部所集成框架和类库的数量越来越多。spring最早的版本中就包含quartz的集成,后来加上了jms,这些可以说是和spring中的其他部分完全不相干的东西。此外越来越多的项目在向spring靠拢或者使用spring作为项目内核,比如开源的jms服务器active mq,web中用到的valuelist。

真是“春”城无处不飞花啊!

今天你 spring了么??

分享到:
评论

相关推荐

    word、excel、ppt转pdf,spring boot小demo

    本项目是一个基于Spring Boot框架实现的实用工具,用于将Microsoft Office的三种常见文件格式——Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)转换为PDF格式。这个小Demo提供了完整的功能,无需任何水印,...

    springcloud jar包转war包 demo

    eureka,zuul,springclod jar转 war 自己做的示例,放到tomcat中运行,博客地址 http://blog.csdn.net/u012326462/article/details/79055652

    Spring Boot整合Spring Batch,实现批处理

    首先,**Spring Boot** 是一种基于Spring框架的简化版启动器,它极大地减少了传统Spring应用的配置工作。通过自动配置和“起步依赖”(Starter Dependency),Spring Boot使得创建独立的、生产级别的Java应用变得...

    Spring+jsp老项目转Springboot的示例Demo

    在传统Spring项目中,我们需要配置XML文件来声明Bean,而在Spring Boot中,大部分可以通过注解完成,使得代码更简洁、更易于维护。 在Spring+jsp项目中,通常我们通过Controller层接收请求,然后转发到JSP页面进行...

    spring2.0升级到spring3.0.5的开发包

    Spring框架是Java应用程序开发中的一个核心组件,它提供了一个丰富的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)功能,使得开发者能够更方便地管理对象和实现模块化...

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    4、大规模的并行处理 5、手动或是有计划的重启 6、局部处理:跳过记录(如:回滚) 技术目标: 1、利用Spring编程模型:使程序员专注于业务处理,让Spring框架管理流程。 2、明确分离批处理的执行环境和应用。 3、...

    Spring Integration + Spring WS 整合

    Spring Integration + Spring WS 整合 在 Java 领域中,Spring Integration 和 Spring WS 是两个常用的框架,它们分别负责集成系统和 Web 服务。今天,我们将探讨如何将这两个框架整合在一起,实现一个完整的 Web ...

    Spring 整合 Scala 编程【转】

    标题 "Spring 整合 Scala 编程【转】" 暗示了本文将探讨如何在Spring框架中使用Scala语言进行编程。Scala是一种强大的、面向对象且支持函数式编程的编程语言,它与Java虚拟机(JVM)兼容,因此可以无缝集成到Spring...

    基于Spring Batch的大数据量并行处理

    ### 基于Spring Batch的大数据量并行处理 #### 概述 Spring Batch是一款用于高效处理大量数据的开源框架,特别适用于批处理任务。它由Spring Source与Accenture合作开发,结合了双方在批处理架构和技术上的优势,...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...

    spring类库 spring类库

    Spring框架是Java开发中不可或缺的一部分,它以其模块化、松耦合和强大的功能特性而闻名。这个"spring类库"包含的资源可以帮助开发者快速搭建基于Spring的项目环境。以下是对Spring框架及其核心组件的详细解释。 ...

    spring3.0.5 所有jar文件

    包含spring 3.0.5的所有jar文件: org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.aspects-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE...

    spring 4.3.14(全)最新的spring4正式版

    Spring 框架是 Java 开发中的一个核心组件,它为构建企业级应用程序提供了全面的编程和配置模型。Spring 4.3.14 是该框架的最后一个4.x系列正式版,发布于2018年2月24日。这个版本在Spring 5.0发布之前提供了一个...

    精通spring - Mastering Spring.pdf

    根据提供的信息来看,本次的任务是围绕“精通Spring”这一主题展开深入探讨,但由于给定的部分内容与主题不符,主要涉及一个二手书籍交易平台的信息,这里我们将忽略这部分内容,转而聚焦于Spring框架的核心概念、...

    基于Spring Boot + NIO实现的电商平台见证宝服务

    首先,Spring Boot是Spring框架的一个轻量级衍生版,它极大地简化了创建独立的、生产级别的基于Spring的应用程序的过程。通过自动配置、起步依赖和内嵌的HTTP服务器(如Tomcat或Jetty),Spring Boot使得开发者可以...

    Spring cloud与Spring boot 集成完整案例

    自动配置是Spring Boot的一大亮点,它可以根据项目中的依赖自动配置相关的Bean。起步依赖使得开发者可以通过简单的引入相应启动器(starter)就能获得所需的功能。Actuator则提供了监控和管理应用的端点,如健康检查...

    spring3.1 官方全部jar包

    spring3.1官方所有的jar包 org.springframework.aop-3.1.RELEASE.jar org.springframework.asm-3.1.RELEASE.jar org.springframework.aspects-3.1.RELEASE.jar org.springframework.beans-3.1.RELEASE.jar org....

    Spring插件下载教程

    - **下载方式**:鉴于Spring Tool Suite及其依赖插件体积较大,通常建议通过网络下载安装。 - **版本匹配**: - **Helios**(Eclipse 3.6)对应的更新网址为:`...

    spring 源码中文注释

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。这份"spring 源码...

    spring整合rabbitmq需要的jar包(spring版本4.2.0)

    在实际项目中,Spring与RabbitMQ的整合可以极大地提升系统的可扩展性和可靠性,允许不同服务之间通过消息进行通信,降低耦合度,同时处理高并发场景下的异步任务。这三款jar包为这样的整合提供了必要的支持,确保了...

Global site tag (gtag.js) - Google Analytics