spring的简介

1)什么是spring?

答:spring是一个致力于解决企业级开发的一个分层的javaEE的框架,它是以IOC和AOP为核心,使用基本的JavaBean来完成工作。spring在表现层有springmvc以及struts的框架功能;在业务逻辑层可以管理事务,记录日志等;在持久层可以整合mybatis或者mybatisplus或者hibernate等技术进行开发。虽然spring贯穿于表现层,业务逻辑层和持久层,但是他并不是手替代对原有的框架,而是想要与他们进行整合。

他的优点:

1:非侵入式入侵:可以使应用程序对框架依赖度最小化

2:方便解耦,简化开发:spring是一个大型的工厂,可以将所有的对象的建立和依赖关系的维护都交给spring容器管理,大大降低了组件之间的耦合性。

3:支持AOP:spring提供了AOP的支持,允许对事物和日志进行管理

4:支持声明式的事物处理:只需要通过配置或者注解就能够完成对事务的管理,而无需手动编程。

5:方便集成各种的优秀的框架:

6:集成了对jUnit4的测试支持:对测试更好

7:降低了开发难度

2)spring的体系结构

 1:Core Container(核心容器)

      spring的核模块是其他模块的建立的基础,他主要由Beans模块,Core模块,Context模块,Context- Context-support 模块和 SpEL ( Spring Expression Language , Spring 表达式语言)模块 组成,具体介绍如下。 

     Beans模块:提供了BeanFactory,是工厂模式的经典体现,spring将管理对象称为Bean。

     Core模块:提供了spring框架的基本组成部分,包括IOC和DI功能。

     Context上下文模块:建立在core和Beans模块之上,它是访问定义和配置的任何对象的媒介。其中ApplicationContext接口是上下文的焦点。

     Context-support 模块:提供了对第三方库嵌入 Spring 应用的集成支持,比如缓存 ( EhCache、 Guava、 JCache)、 邮件服务 (JavaMail)、 任务调度( CommonJ、 Quartz) 和模 板引擎( FreeMarker、 JasperReports、 速率)。 • SpEL 模块:是 Spring 3.0 后新增的模块,它提供了 Spring Expression Language 支持, 是运行时查询和操作对象图的强大的表达式语言。 

2. Data Access/lntegration (戴帽访问l集成)

数据访问/集成层包括 JDBC、 ORM 、 OXM、 JMS 和 Transactions 模块,具体介绍如下。

JDBC 模块:提供了一个 JDBC 的抽象层,大幅度地减少了在开发过程中对数据库操作的 编码。 .

ORM 模块:对流行的对象关系映射 API ,包括 JPA、 JDO 和 Hibernate 提供了集成支持。

Transactions 事务模块:支持对实现特殊接口以及所有 POJO 类的编程和声明式的事 务管理。 

3.web模块

Spring 的 Web 层包括 WebSocket、 Servlet、 Web 和 Portlet 模块,具体介绍如下。

• WebSocket 模块: Spring 4.0 以后新增的模块,它提供了 WebSocket 和 SockJS 的实现, 以及对 STOMP 的支持。

• Servlet 模块:也称为 Spring-webmvc 模块,包含了 Spring 的模型一视图一控制器(MVC) 和 REST Web Services 实现的 Web 应用程序。

• Web 模块:提供了基本的 Web 开发集成特性,例如: 多文件上传功能、 使用 Servlet 监 听器来初始化 loC 容器以及 Web 应用上下文。

• Portlet 模块:提供了在 Portlet 环境中使用 MVC 实现,类似 Servlet 模块的功能。 

4. 其他模块 Spring 的其他模块还有 AOP、 Aspects、 Instrumentation 以及 Test 模块,具体介绍如下

• AOP 模块:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能 进行分离,以降低搞合性。

• Aspects 模块:提供了与 AspectJ 的集成功能, AspectJ 是一个功能强大且成熟的面向切 面编程 (AOP) 框架。

• Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器 中使用。

• Messaging 模块: Spring 4.0 以后新增的模块,它提供了对消息传递体系结构和协议 的支持。

• Test 模块:提供了对单元测试和集成测试的支持。

3)spring的核心容器:

Spring 框架的主要功能是通过其核心容器来实现的,因此在正式学习 Spring 框架的使用之 前,有必要先对其核心容器有一定的了解。Spring 框架提供了两种核心容器,分别为 BeanFactory AppIicationContext。 本节中将对这两种核心容器进行简单的介绍。

1:BeanFactory:是一个基础类型的IOC容器(这里表示控制反转),他提供了完整的IOC服务的支持。简单来说,BeanFactory是一个管理Bean的工厂,他主要负责各种初始化Bean,并调用他们的生命周期。

      BeanFactory 接口提供了几个实现类,其中最常用的是 org.springframework. beans factory.xml.XmIBeanFactory ,该类会根据 XML 配置文件中的定义来装配 Beano 创建 BeanFactory 实例时,需要提供 Spring 所管理容器的详细配置信息,这些信息通常采 用 XML 文件形式来管理,其加载配置信息的语法如下。


BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("F: /applicationContext.xml")) ;

这种加载方式在实际开发中并不多用,读者了解即可。

2:ApllicationContext:是BeanFactory的子接口,也被称为应用上下文,是另一种常用的spring核心容器。不仅包含了BeanFactoy的所有功能,而且还添加了对国际化,资源访问,事务传播等方面的支持。

1). 通过 ClassPathXmlApplicationContext 创建 ClassPathXmlAp~licationContext 会从类路径 classPath 中寻找指定的 XML 配置文件,找
到并装载完成 ApplicationContext 的实例化工作,其使用语法如下。


ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation) ;

上述代码中, configLocation 参数用于指定 Spring 配置文件的名称和位置。 如果其值为 "applicationContext.xml" ,贝IJ Spring 会去类路径中查找名称为 applicationContext.xml 的配置 文件。 

2). 通过 FileSystemXmlApplicationContext 创建

FileSystemXmlApplicationContext 会从指定的文件系统路径(绝对路径)中寻找指定的 XML 配置文件,找到并装载完成 ApplicationContext 的实例化工作,其使用语法如下。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);

与 ClassPathXmlApplicationContext 有所不同的是,在读取 Spring 的配置文件时, FileSystemXmlApplicationContext 不再从类路径中读取配置文件,而是通过参数指定配置文件 的位置,例如 "D:/workspaces/app I icationContext. xm 1"。 如果在参数中写的不是绝对路径,那 么方法调用的时候,会默认用绝对路径来找。 这种采用绝对路径的方式,会导致程序的灵活性变 差,所以这个方法一般不推荐使用。 在使用 Spring 框架时,可以通过实例化其中任何一个类来创建 ApplicationContext 容器。

    通常在 Java 项目中,会采用通过 ClassPathXmlApplicationContext 类来实例化 ApplicationContext 容器的方式,而在 Web 项目中, ApplicationContext 容器的实例化工作会交由 Web 服务器来完成 。 Web 服务器实例化 ApplicationContext 容器时,通常会使用基于 ContextLoaderListener 实现的方式,此种方式只需要在 web.xml 中添加如下代码。

 重点:

BeanFactory 和 ApplicationContext 两种容器都是通过 XML 配置文件加载 Bean 的。

二者的主 要区别在于,如果 Bean 的某一个属性没有注入,使用 BeanFacotry JJn载后,在第一次调用 getBea()方法时会抛出异常,而 ApplicationContext 则在初始化时自检,这样有利于检查所依赖 属性是否注入。 因此 ,在实际开发中,通常都优先选择使用 ApplicationContext ,而只有在系统 资源较少时,才考虑使用 BeanFactory。

参考书籍:Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)

原文地址:https://www.cnblogs.com/clover-forever/p/12529630.html