spring实战4之容器篇

来源:互联网 发布:sql delete一条数据 编辑:程序博客网 时间:2024/05/16 07:53

一、Spring的上下文容器
Spring框架的中心是一个容器,它负责管理Spring应用中的bean是如何创建、配置与管理的。
Spring自带多个容器实现,简单的分为两大类。
1.BeanFactory是最简单的容器,提供基本的DI支持。bean工厂太低级了,所以一般不怎么使用。

2.ApplicationContext,基于BeanFactory构建,并提供应用框架级的的服务,例如从属性文件解析文本信息以及发布应用事件给感兴趣的事件监听者。
Spring自带多种ApplicationContext接口的不同实现。
(1)AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载Spring的应用上下文。
(2)AnnotationConfigWebApplicationContext:从一个或多个基于java配置类中加载Spring Web应用上下文。
(3)ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
(4)FileSystemXmlapplicationcontext:从文件系统下的一个或多个XML配置文件中加载上下文的定义。
(5)XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义。

二、Bean的生命周期
这里写图片描述

1.Spring实例化bean。

2.Spring将值和bean引用注入到bean的属性中。

3.如果一个bean实现了BeanNameAware,Spring将这个bean的id传递给setBeanName()方法。

4.如果一个bean实习了BeanFactoryAware,Spring调用setBeanFactory()方法,将一个引用传入一个附入(enclosing)的应用上下文。

5.如果一个bean实现了BeanPostProcessor接口,Spring调用其postProcessBeforeInitialization()方法。

6.如果一个bean实现了InitializingBean接口,Spring调用其afterPropertiesSet()方法。类似的,如果这个bean使用了init-method进行声明,那么特定的初始化方法将被调用。

7.如果一个bean实现了BeanPostProcessor,Spring调用其postProcessAfterInitialization()方法。

8.在这点,bean就可以被应用使用了,并且一直保持在应用上下文中,直到应用上下文被销毁。

9.如果一个bean实现了DisposableBean接口,Spring调用其destroy()方法。同样,如果这个bean被声明了destroy-method,将会调用特定的方法。

三、Spring的6大分类
这里写图片描述

1.核心Spring容器
这个模块的内部是Spring bean工厂,是Spring提供DI的一部分。建立在bean工厂之上,你将发现Spring应用上下文的多个实现,每一个都提供了配置Spring的不同方式。除了bean工厂和应用上下文之外,这个模块还提供了许多企业级服务,例如邮件、JNDI访问、EJB集成,和调度。

2.Spring AOP 模块
Spring在AOP模块中提供了面向方面编程的丰富支持。这个模块的作用服务于——为你自己的Spring应用开发你自己的aspects。与DI类似,AOP支持应用对象的松散耦合。但是利用AOP,应用级的相关性(例如事务和安全)解除了它们与其他对象的耦合。

3.数据访问和集成
使用JDBC时总是会造成大量的重复代码(获取连接,创建statement,处理结果集合,然后关闭连接)。Spring的JDBC和数据访问对象(DAO)模块将这些重复代码抽象化,因而你可以保持你的数据库代码干净和简单,并且阻止了由数据库资源访问失败导致的错误。这个模块也在多种数据库服务器返回的错误消息之上构建了一层非常有意义的exception。你并不需要去破解神秘而专用的SQL错误消息。

对于那些更喜欢使用对象关系映射(object-relational mapping, ORM)工具的人来说,Spring提供了ORM模块。Spring的ORM支持建立在DAO支持之上,以多种ORM方法提供了建立DAO的方便方法。Spring并没有试图去实现它自己的ORM方法,但是它提供了连接多个流行ORM框架的钩子(hook),包括Hibernate,Java Persistemce APUI,Java Data Objects,以及iBATIS SQL Maps。Spring的事务管理像支持JDBC一样支持这些ORM框架。

这个模块还包括了一个对于Java Message Service(JMS)的Spring抽象,以通过消息机制进行与其他应用的异步集成。此外,对于Spring 3.0,这个模块包含了object-to-XML映射特性,它们是Spring Web Services项目的根本部分。

此外,这个模块使用了Spring的AOP模块来提供Spring应用中对象的事务管理服务。

4.Web和远程
模型-视图-控制器(MVC)样式已经非常广泛地被接受,以用来构建web应用,使得用户接口与应用逻辑向分离。Java在MVC框架中并无缺陷,Apache Struts, JSF, WebWork和Tapestry已经成为了非常流行的MVC选择。

除了面向用户的web应用以外,为了建立可以与其他应用交互的应用,这个模块还提供了多个远程选项。Spring的远程能力包括远程方法调用(Remote Method Invocation, RMI), Hessian, Burlap, JAX-WS,以及Spring自己的HTTP invoker。Spring还提供了使用REST API的一级支持。

5.仪器(INSTRUMENTATION)
Spring的仪器(instrumentation,是这么翻吗)模块包括了向JVM添加助理(agent)的支持。特别地,它向Tomcat提供了一个迂回助理以转换类文件,就像它们是被类加载器加载一样。

6.测试
意识到了开发者写的测试的重要性,Spring提供了一个模块以测试Spring应用。
在这个模块中,你将发现许多的mock对象实现,为了撰写作用于JNDI,servlet,和portlet的单元测试代码。对于集成级的测试,这个模块提供了载入Spring上下文的bean和操作bean的支持。