首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring学习小结【一】

2012-08-21 
spring学习总结【一】Spring使用简单的javabean来解完成以前由EJB完成的事情,然而,spring的用途不仅仅局限于

spring学习总结【一】

Spring使用简单的javabean来解完成以前由EJB完成的事情,然而,spring的用途不仅仅局限于服务器端的开发,从简单性,可测性和松耦合的角度而言,任何java应用都可以从spring中获益,spring的目的是解决企业级应用的复杂性。

?

轻量:从大小与开销两方面讲,spring都是轻量级的

控制反转:控制权的转移成为反转,一个对象依赖的其他对象会通过被动的方式传递进来而 不是对象自身的创建或查找依赖对象

面向切面:允许通过分离应用的业务逻辑与系统级服务进行内聚性开发,业务对象实现他们 应该做的

容器:spring包含并管理应用对象的配置与生命周期,在这个意义他是一个容器,他可以配置你每个bean如何被创建

框架:spring可以将简单的组件配置,组合成为复杂的应用,应用对象被声明为一个组合, 典型的在一个XML文件中

?

为什么用spring?

其定位是许多流行框架framework所没有的,他更关注一种方法管理你的业务对象,spring是全面和模块化的,spring有分层的体系结构,这意味着你能选择用他孤立的任何部分,他的架构仍然是内在稳定,其设计原理从底部帮助你编写易于测试的代码。

?

2.1.?spring需要的jar包

到http://www.springsource.org/dowmload

Dist\spring.jar

Lib\jakarta-commons\commons-logging.jar

如果使用了切面编程(AOP),还需要下列jar文件

Lib\aspectj\aspectweaver.jar?和?aspectjrt.jar

Lib\cglib\cglib-nodep-2-1-3.jar

如果使用了JSR-250中的注解,如@Resource/@PostConstrut/@PreDestroy还需要下列jar包

Lib\j2ee\common-annotations.jar

?

2.2.?创建Java?Project

第一步:创建一个java项目,点击下一步,Libraries(add?External?JARS)引入需要的spring.jar 和common-logging.jar包

第二步:新建一个bean.xml文件,可以参考其他地方的文件进行拷贝

第三步:实例化spring容器

方法一:

在类路径下寻找配置文件来实例化容器

ApplicationContext?ctx?=?new?ClassPathXmlApplicationContext(new?String[]?{"bean.xml"});

该方法的构造参数可以有多个,但是当只有一个xml文件的时候,只要写bean.xml文件名

方法二:

不提倡使用该方法,因为其不具有适应性,测试时可以用

在文件路径下寻找配置文件来实例化容器

ApplicationContext?ctx?=?new?FileSystemXmlApplicationContext(new?String[]?{"d:\\bean.xml"});

Spring的配置文件可以有多个,通过string数组传入。

在此可以新建一个Junit测试类测试一下。

编写spring配置文件时,不能出现帮助提示

由于spring的schema文件位于网络上,如果机器不能联网,则无法提示,解决方法如下:

(1)让机器联网,eclipse会自动上载schema文件并缓存到本地的硬盘上

(2)手动添加schema文件

Windows-->preferences-->myeclipse-->files?and?editors?-->xml?-->xmlcatalog

点击add?在key?Type中选择url

在location中选文件系统File?System,然后再spring解压缩目录的dist/resources目录中选择spring-beans-2.5.xsd

Key?Type中选择shcema?location

Key改为http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

?

配置bean.xml文件

<bean?id="personService"?name=""?style="margin-top: 0pt; margin-bottom: 0pt;">在java中通过上下文对象,根据bean的id去获取容器创建需要的对象。

?

2.3.?Bean实例化方式

(1)使用类构造器实例化

<bean?id="personService"??style="margin-top: 0pt; margin-bottom: 0pt;">(2)使用静态工厂方法实例化

新建一个工厂方法来创建Bean对象

public?class?BeanFactory{

public?static?PersonServiceBaen?createBean(){

return?new?PersonServiceBean();

}

}

<bean?

id="personService"

style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt; margin-left: 21pt;">factory-method="createBean"?/>

(3)使用工厂方法实例化

public?class?BeanFactory{

public?PersonServiceBean?createBean(){

return?new?PersonServiceBean();

}

}

<bean?

id="beanFactory"

style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt;">?

<bean?

id="personService"

factory-bean="beanFactory"

factory-method="createBean"?/>

?

Bean的作用域

@1.?Singleton(默认单例模式)

在每个spring?IOC?容器中,一个bean定义只有一个对象实例,默认情况下会在容器启动时初始化bean,但是我们可以指定bean节点的lazy-init="true"?来延迟初始化bean,这个时候只有第一次获取bean才会初始化bean,如:

<bean?id="XXX"?style="margin-top: 0pt; margin-bottom: 0pt;">若想对所有bean都应用延迟初始化,如:

<beans?default-lazy-init="true"></beans>

@2.?Prototype

每次从容器中获取bean都是一个新对象

<bean?............scope="prototype"?/>

?

注意:属性init-method??destroy-method

正常关闭spring容器,需要使用一个抽象类AbstractApplicationContext

<!--EndFragment-->

热点排行