文章目录
  1. 1. 7大模块
    1. 1.1. 核心容器
    2. 1.2. Spring上下文
    3. 1.3. Spring AOP
    4. 1.4. Spring DAO
    5. 1.5. Spring ORM
    6. 1.6. Spring MVC框架
  2. 2. BeanFactory
    1. 2.1. BeanFactory主要方法
  3. 3. ApplicationContext
    1. 3.1. ClassPathXmlApplicationContext
    2. 3.2. FileSystemXmlApplicationContext
    3. 3.3. WebApplicationContext

在学校就学习了spring,实习之后基本各种地方都会用到spring,虽然自己可以没有太多障碍的使用该框架开发,但是一直没有系统到学习过。最近借了书稍微了解了一下。

7大模块

Spring由7大模块组成,每个模块都可以单独使用,又可以相互组合,灵活且方便的部署可以使开发的程序更加简洁灵活。

核心容器

这是Spring框架最基础的部分,它提供了依赖注入(Dependency Injection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来

Spring上下文

核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。

另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。

Spring AOP

通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO

使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。

这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使你不用再试图破译神秘的私有的SQL错误消息!

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

Spring ORM

Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

###Spring Web
Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。

Spring MVC框架

MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

BeanFactory

BeanFactory ,作为 Spring 基础的 IoC 容器,从名字上看就是 Spring 的一个 Bean 工厂。如果单从工厂模式的角度思考,它就是用来“生产 Bean ”,然后提供给客户端。但是它到底是如何生产 Bean 的呢?

spring使用BeanFactory来实例化、配置和管理对象,但是它只是一个接口,里面有一个getBean()方法。我们一般都不直接用BeanFactory,而是用它的实现类ApplicationContext,这个类会自动解析我们配置的applicationContext.xml,然后根据我们配置的bean来new对象,将new好的对象放进一个Map中,键就是我们bean的id,值就是new的对象。

BeanFactory主要方法

  1. 返回指定名称的Bean

    Object getBean(String name) throws BeansException;  
    
  2. 返回指定类型的Bean

    <T> T getBean(Class<T> requiredType) throws BeansException; 
    
  3. 查看容器中是否包含指定名称的Bean

    boolean containsBean(String name);  
    
  4. 是否是单例

    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    
  5. 是否是多例

    boolean isPrototype(String name) throws NoSuchBeanDefinitionException; 
    

BeanFactory在调用getBean()之前不会实例化任何对象,只有在需要创建JavaBean的实例对象时,才会为其分配资源空间。

ApplicationContext

ApplicationContext 接口 是 BeanFactory 接口的子接口,在包含 BeanFactory 所提供的全部功能之外,其功能得到了更大的增强,包括各种不同应用层的 context 实现,国际化消息资源处理,各种不同路径不同类型的资源加载, application Event 事件发布等, ApplicationContext 能够更加好地满足不同企业应用的各种不同需求。在 Spring 框架中, ApplicationContext 接口也有许多子接口与实现,通过层层扩展与实现,最终 ApplicationContext 形成了一个功能强大的 ioc 容器。

ApplicationContext有三个实现类。下面就分别介绍一下:

ClassPathXmlApplicationContext

ClassPathXmlApplicationContext从当前路径下检索配置文件并装载它来创建容器的实例。

ApplicationContext ctx = new ClassPathXmlApplicationContext("com/baobaotao/ context/beans.xml");  
对于ClassPathXmlApplicationContext来说,"com/baobaotao/context/beans.xml"等同于"classpath: com/baobaotao/context/beans.xml"

FileSystemXmlApplicationContext

如果配置文件放置在文件系统的路径下,则可以优先考虑使用FilySystemXml ApplicationContext

ApplicationContext ctx =               new FileSystemXmlApplicationContext("com/baobaotao/ context/beans.xml");  
对于FileSystemXmlApplicationContext来说,“com/baobaotao/context/beans.xml”等同于“file: com/baobaotao/context/beans.xml”。  

WebApplicationContext

WebApplicationContext是Spring的web应用容器,有两种方法可以在Servlet中使用WebApplicationContext。第一种方法:在Servlet的web.xml文件中配置Spring的ContextLoaderListener监听器;第二种方法:同样要修改web.xml配置文件,在配置文件中添加一个Servlet,定义使用Spring的org.springframework.web.context.ContextLoaderServlet类。

ServletContext servletContext = request.getSession().getServletContext();      
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);  

可以指定一组配置文件,Spring会自动将多个配置文件在内存中”整合”成一个配置文件

ApplicationContext ctx = new ClassPathXmlApplicationContext(                                        new String[]{"conf/beans1.xml","conf/beans2.xml"});
文章目录
  1. 1. 7大模块
    1. 1.1. 核心容器
    2. 1.2. Spring上下文
    3. 1.3. Spring AOP
    4. 1.4. Spring DAO
    5. 1.5. Spring ORM
    6. 1.6. Spring MVC框架
  2. 2. BeanFactory
    1. 2.1. BeanFactory主要方法
  3. 3. ApplicationContext
    1. 3.1. ClassPathXmlApplicationContext
    2. 3.2. FileSystemXmlApplicationContext
    3. 3.3. WebApplicationContext