Spring框架学习笔记--Spring介绍(一)

1. Spring是什么

  • Spring是一个开源框架。
  • Spring为简化企业级应用开发而生,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能。
  • Spring是一个IOC(DI)和AOP容器框架。

    使用Spring的好处:

  • 轻量级:Spring是非侵入性的(在使用Spring时,不需要实现Spring提供的任何接口,也不需要继承任何父类,就能享用Spring提供的功能),基于Spring开发的应用中的对象可以不依赖于Spring的API。
  • 依赖注入(DI--dependency injection、IOC):Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
  • 面向切面编程(AOP--aspect oriented programming):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
  • 容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
  • 框架:Spring实现了使用简单的组件配置组合成一个复杂的应用,在Spring中可以使用XML和Java注解组合这些对象
  • 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上Spring自身也提供了展现层的SpringMVC和持久层的Spring JDBC)。


2. Spring 模块

        Spring框架由约20个模块组成,这些模块包括:Core Container, Data Access/Integration, Web, AOP (Aspect OrientedProgramming), Instrumentation和 Messaging,如下图所示;



2.1 Core Container(核心容器)

核心容器,提供了Spring框架的基本功能。主要由Core、Beans、Context(上下文)和SpEL(Spring EL表达式)模块组成。

  • Core模块:提供了矿机的基本组成部分,包括控制反转(IOC)和依赖注入特性。
  • Beans模块:提供BeanFactory,它是一个工厂模式的复杂实现。BeanFactory使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Context模块:建立在由核心和 Bean 模块提供的坚实基础上,它是访问定义和配置的任何对象的媒介。ApplicationContext 接口是上下文模块的重点。
  • SpEL模块:在运行时提供了查询和操作一个对象图的强大的表达式语言。

2.2 Data Access/Integration(数据访问/集成)

数据访问/集成主要由JDBC、ORM、OXM、JMS和Transaction模块组成。

  • JDBC模块:提供了删除冗余的JDBC相关编码的JDBC抽象层。
  • ORM模块:为流行的对象关系映射 API,包括 JPA,JDO,Hibernate 和 iBatis,提供了集成层。
  • OXM模块:提供了抽象层,它支持对 JAXB,Castor,XMLBeans,JiBX 和 XStream 的对象/XML 映射实现。
  • JMS模块:Java消息服务模块包含生产和消费的信息的功能。
  • Transaction模块:事务模块为实现特殊接口的类及所有的 POJO 支持编程式和声明式事务管理。

2.3 Web

Web层主要由Web,Web-MVC,Web-Socket 和 Web-Portlet 模块组成。

  • Web模块:模块提供了基本的面向 web 的集成功能,例如多个文件上传的功能和使用 servlet 监听器和面向 web 应用程序的上下文来初始化 IOC 容器。
  • Web-MVC模块:也被称为Web-Servlet模块,包含 Spring 的模型-视图-控制器(MVC),实现了 web 应用程序。
  • Web-Socket模块:为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。
  • Web-Portlet模块:提供了在 portlet 环境中实现 MVC,并且反映了 Web-Servlet 模块的功能。

 2.4 其他

还有其他一些重要的模块,如 AOP(面向切面编程),Aspects,Instrumentation(整合),Messaging(消息) 和Test(测试)模块。

  • AOP模块:提供了面向方面的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,它实现了应该分离的功能。
  • Aspects模块:提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。
  • Instrumentation模块:在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。
  • Messaging模块:为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。
  • Test模块:支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。


3. IOC和AOP


3.1 IOC(控制反转)

        控制反转模式(也称为依赖注入)的基本概念:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。

        在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。下表列出了 IOC 的一个实现模式。


类型1服务需要实现专门的接口,通过接口,由对象提供这些服务,可以从对象查询依赖性(例如,需要的附加服务)
类型2通过 JavaBean 的属性(例如 setter 方法)分配依赖性
类型3依赖性以构造函数的形式提供,不以 JavaBean 属性的形式公开

        Spring 框架的 IOC 容器采用类型 2 和类型3 实现。


3.2 AOP(面向切面编程)

        面向方面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

        AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是 Java 类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。

        AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。


3.3 IOC容器

        Spring 设计的核心是 org.springframework.beans,它的设计目标是与 JavaBean 组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。

        BeanFactory 支持两个对象模型。

  • 单态模型:提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
  • 原型模型:确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。

        bean 工厂的概念是 Spring 作为 IOC 容器的基础。IOC 将处理事情的责任从应用程序代码转移到框架。正如我将在下一个示例中演示的那样,Spring 框架使用 JavaBean 属性和配置数据来指出必须设置的依赖关系。


3.4 BeanFactory接口

        Spring 使用 BeanFactory 来实例化、配置和管理对象,但是它只是一个接口,里面有一个 getBean() 方法,我们一般都不直接用 BeanFactory,而是用它的实现类 ApplicationContext,这个类自动解析我们配置的 applicationContext.xml。

applicationContext.xml

 <?xml version="1.0" encoding="UTF-8"?>
 <beans>
    <!-- class:全类名,是用反射的方式,由Spring创建对象。id:标识该对象 -->
    <bean id="car" class="com.spring.Car"></bean>
 </beans>


1. 创建 Spring 的 IOC 容器对象

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

2. 从 IOC 容器中获取 Bean 对象

Car car = (Car)applicationContext.getBean("car");

4. 小结

        该篇内容主要介绍了 Spring框架的基础;介绍了 Spring分层框架的模块,主要介绍了其中的两个模块:Spring AOP 和 IOC 容器。介绍了 BeanFacorty 接口的使用,IOC 容器对象的创建及从容器中获取 Bean对象的方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值