什么是Spring

wuyabing 2010-10-05

Spring作为实现J2EE的一个全方位应用程序框架,为我们开发企业级应用提供了一个健壮、高效的解决方案。所谓全方位,不得不说以下几个特点:

    1 非侵入式:对于写代码从来不考虑复用和移植的程序员来说,这一点根本就没有吸引力,那么请跳过。所谓非侵入式是指Spring框架的API不会在业务逻辑上出现,也就是说我们的业务逻辑应该是纯净的,不能出现与业务逻辑无关的代码。首先针对应用而言,这样我们才能将业务逻辑从当前应用中剥离出来,从而在其他的应用中实现复用;其次针对框架而言,由于业务逻辑中没有Spring的API,所以业务逻辑也可以从Spring框架快速的移植到其他框架。

2 容器:Spring提供容器功能,容器可以管理对象的生命周期,对象与对象之间的依赖关系。你可以写一个配置文件(通常是xml文件),在上面定义对象的名字,是否是单例,以及设置与其他对象的依赖关系。那么在容器启动之后,这些对象就被实例化好了,你直接去用就好了,而且依赖关系也建立好了。

    3 IOC:控制反转,谓之“依赖关系的转移”,如果以前都是依赖于实现,那么现在反转为依赖于抽象吧,其实它的核心思想就是要面向接口编程,至于何谓接口何谓抽象,以及它们的好处,多看看设计模式吧,这里就不费口舌了。

    4 DI依赖注入:建立对象与对象之间依赖关系的实现,包括接口注入、构造注入、set注入,在Spring中只支持后两种

    5 AOP:面向方面编程,我们可以把日志、安全、事务管理等服务(或功能)理解成一个“方面”,那么以前这些服务一直是直接写在业务逻辑的代码当中的,这有两点不好;首先业务逻辑不纯净,其次这些服务被很多业务逻辑反复使用,完全可以剥离出来做到复用。那么AOP就是这些问题的解决方案,我们可以把这些服务剥离出来形成一个“方面”,以期做到复用;然后将“方面”动态的插入到业务逻辑中让业务逻辑能够享受到此“方面”的服务

    其他还有一些特点不是Spring的核心,这里只做简单陈述,如:对JDBC的封装与简化,提供事务管理功能,对O/R mapping工具(hibernate、iBATIS)的整合;提供MVC解决方案,也可以与其他web框架(Struts、JSF)进行整合;还有对JNDI、mail等服务进行封装。

beanFctory是spring最基本的容器。

spring的web应用跟struts是一样的原理。

现在spring最高版本是3.03

spring2.0和2.5的新特性

 Annotation驱动配置,在classpath中自动搜索配置

spring里的Bean 容器里装的东西就叫bean。bean就是由spring容器初始化,装配及管理的对象。除了这些变化以外,spring的bean与其他的bean就没什么区别了。我们可以把一个bean理解为一个类,bean的下级property就是这个类的属性,如果要初始化可以在xml里面赋值,这也就是所谓的设置注入。(为什么要使用bean呢,这是因为spring就是从EJB改装过来,spring作者看EJB太复杂了,比如说它增加一个数据就要改好几个配置文件。)

beanfactory是容器的核心接口,它的职责包括实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFactory就是最常用的一个。但它实际有很多个接口,如构造工厂。

实例化容器:把配置文件传进去,它自动进行初始化,这里用到classpath,可以到classpath里去找配置文件。

spring容器可以管理一个或多个bean,它们顶级接口就是beandefinition对象。全限定类名,bean行为的行为定义,如作用域,生命周期回调等。

bean的命名与java的变量命名一样。bean里面可以有多个id,这是因为每个id放的东西不一样。

bean的别名,如有些id命名很长,我们就可以用到别名,这样就可以更好区分。

用构造器来实例化,当我什么都没写,自动生成一个,如果我写了一个有参数,而我们调用一个空的构造器,这是因为我们写了一个有参数的构造器,系统就不会再默认给我们一个空的构造器。那么就会报错。

使用容器:定义一个result,然后放进工厂里。

//service和web处理一个请求,

自动装配:

属性我不需要自己配置,它会自动为我们装进来,自动装配有五种类型:

在spring中,继续关系是不一样的,在spring里,只要有相同属性的两个,都有可能成为父子关系。

我们默认的是no,如果是byName,它在注入的注入的时候就会自动填充。但被调用类的名字必须要和配置的那个ID名字一样,这样我们的ID名字必须是唯一性的。不然就会抛错。

如果是byType那么被调用类只有一个实现类。不然抛错。用这个应该用构造注入。而不是属性注入。

因为自动配置是偷偷的进行注入的,所以不建议用,因为这对我们的调试很困难。

方法注入:

Bean的作用域:(重要)

在spring里,bean是有作用域的,bean的作用域是有容器来控制的。

singleton:

prototype:

request:

session:

glbalsession:

Bean里面默认的就是单例的。如果不想用默认的,可以用singleton=“false”。设计bean的范围scope=“requst”

资源:(了解)

就是我们配置文件从哪里来的,有哪几种类型。spring自定义了一个Resource接口。这个接口有很多的实现,常用的又ClassPathResource,FileSystemResoce。

ApplicationContext:(重点)

它是context包中最重要的一个接口。

它由BeanFactory接口派生而来。

为了以一种更面向框架的方式工作,以及对上下文进行分层和实现继承,context包还提供

了以下功能:

*MessageSource提供国际化的消息访问

*资源访问如URL和文件

*事件传播实现了ApplicationListener接口的bean

*载入多个(有继承关系)的上下文使得每一个上下文专注于一个特定层次,比如应用web层。

尽量使用ApplicationContext.

ApplicationContext包含BeanFactory的所有功能。

ApplicationContext在WEB应用中的实例化:比较重要

在web.xml中,listener为spring的入口,然后会默认去找context-param。

等下下课复习下servlet的监听器

servlet是sturts的入口。

选中一个单词往后找c+s+k

applicationContext.xml

bean:petStore

dataAccessContext-local.xml

配置源数据

配置事物管理

配置ibatis初始化

  注入DAO

Spring中的AOP是非业务逻辑实现

相关推荐

kyle00 / 0评论 2020-05-07