Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。

Spring是一个十分庞大的体系,具体可以访问它的官网https://spring.io/projects进行详细了解。

Spring体系里的常用到的项目:

  • SpringFramework
  • SpringData
  • SpringSecurity
  • SpringBoot
  • SpringCloud

Spring实现了工厂模式的工厂类,这个类名为BeanFactory(接口),在程序中通常用他的子接口ApplicationContext。

BeanFactory是Spring容器的根接口,ApplicationContext是它的子接口,通常用它的子接口ApplicationContext来访问Spring容器。

ApplicationContext子接口常用的有四个实现类

  • ClassPathXmlApplicationContext   从 classpath 加载 spring 的配置文件
  • FileSystemApplicationContext   从系统文件加载 spring 的配置文件
  • AnnotationConfigApplicationContext   获取基于注解的 spring 容器对象
  • XmlWebApplicationContext    在 web 环境中获取 spring 容器对象

Spring相当于一个大的工厂类,在其配置文件中通过<bean>元素配置用于创建实例对象的类名和实例对象的属性。

工厂模式是一种生产对象型的设计模式,有了工厂模式后,当需要某个类的对象时,就不再需要new指定的类,而是调用工厂中的方法即可。也就不需要
关心对象的创建过程。甚至有时候也许你需要的对象只要是某种大分类的类型就可以了,而不必是某个指定的类型。不会过渡依赖某个类,这些类都是
易于被替换的,以提高整个项目的可维护性。

组成 Spring 框架的每个模块都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

  • Spring 核心容器:核心容器提供 Spring 框架的基本功能,管理着Spring应用中bean的创建、配置和管理。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用DI将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。Spring 上下文和Bean工厂都是 bean 容器 的实现。
  • Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。
  • Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
  • Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  • Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。
  • Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

    spring有两个核心思想 (IOC (控制反转) , AOP(面向切面编程))

    IOC (控制反转) :  控制反转就是一种思想 , 这个思想是怎么想的呢 , 就是将对象控制权的转移,从程序代码本身反转到了外部容器 。就是想把实体类 的生命周期交给spring去控制 , 让spring实现创建 ,实现初始化 , 实现销毁 . 这样就可以大大的免去在编写代码的过程中new一个对象 , 众所周知new 对象 是java代码编写里耦合性最大的一个事情 。

    有反转就会有正转,正转就是应用程序用到了什么对象会直接在应用程序中进行创建,自己手动new出来。 

    也说了IOC是一种思想 ,那么怎么把这种思想实现呢 ,如今比较流行的的方法是依赖注入 DI(Dependency Injection)

    DI(依赖注入):是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。

    两者的关系就是ioc是一种思想 ,而DI确实一种实现方式 ,这里介绍了IOC,那么下面再来说下spring的另外一个核心思想AOP

    AOP(面向切面编程) : 面向切面编程是对OOP(面向对象编程)的完善和补充 。

    面向切面是面向对象中的一种方式而已。在代码执行过程中,动态嵌入其他代码,叫做面向切面编程。

    AOP采用一种称为“横切”的技术,将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置中。

    常见的使用场景有日志 ,事物管理以及数据库操作

    06-11 02:57