Spring容器框架

(自己巩固复习使用)

容器restarting 容器框架下载_应用程序

1.spring模块组成:

Spring框架是模块化的,开发人员可以自由选择所需部分。

Spring框架的功能被有组织的分散到约20个模块中。这些模块分布在核心容器,数据访问/集成,Web,AOP(面向切面的编程),植入(Instrumentation),消息传输和测试,
如下面的图所示。

容器restarting 容器框架下载_容器restarting_02

  1. 核心容器由以下模块组成,spring-core, spring-beans,spring-context,springcontext-support,和spring-expression(Spring表达式语言)。
  2. spring-core和spring-beans模块提供了框架的基础功能,包括IOC和依赖注入功能。 BeanFactory是一个成熟的工厂模式的实现。你不再需要编程去实现单例模式,允许你把依赖关系的配置和描述从程序逻辑中解耦。
  3. 上下文(spring-context)模块建立在由Core和Beans模块提供的坚实的基础上:它提供一个框架式的对象访问方式,类似于一个JNDI注册表。上下文模块从Beans模块继承其功能,并添加支持国际化(使用,例如,资源集合),事件传播,资源负载,并且透明创建上下文,例如,Servlet容器。Context模块还支持Java EE的功能,如EJB,JMX和基本的远程处理。ApplicationContext接口是Context模块的焦点。spring-context-support支持整合普通第三方库到Spring应用程序上下文,特别是用于高速缓存ehcache,Cache)和调度(CommonJ,Quartz)的支持。
  4. spring-expression模块提供了强大的表达式语言去支持查询和操作运行时对象图。这是对JSP 2.1规范中规定的统一表达式语言(unified EL)的扩展。该语言支持设置和获取属性值,属性分配,方法调用,访问数组,集合和索引器的内容,逻辑和算术运算,变量命名以及从Spring的IoC容器中以名称检索对象。 它还支持列表投影和选择以及常见的列表聚合。
  5. 容器restarting 容器框架下载_spring_03

2.spring简介:

Spring是一个开源的、轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。
       它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。
       框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,
       Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

3.spring优点:

Spring 具有简单、可测试和松耦合等特点,不仅可以用于服务器端的开发,也可以应用于任何 Java 应用的开发中。Spring 框架的主要优点具体如下:

1)方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
2)方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
3)降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
4)方便程序的测试
Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
5)AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
6)Spring 支持声明式事务管理
只需要通过配置就可以完成对事务的管理,而无须手动编程。
7) Spring 不会让你白费力气做重复工作,它真正的利用了一些现有的技术,像ORM 框架、日志框架、JEE、Quartz 和 JDK 计时器,其他视图技术。
8) Spring 提供了全功能的MVC框架
9) Spring 是一个Java平台的框架 是一个轻量级的解决方案
10) Spring 能够将AOP透明地集成到您的应用逻辑中
11) Spring 提供了用于持久保存数据的各种选择

注意: Spring被设计为非侵入式的,这意味着您的逻辑代码通常不依赖于Spring框架本身。在集成其它框架(例如数据访问框架)时,虽然存在数据访问框架和Spring库的一些整合逻辑。但是,可以很容易将这些整合逻辑与其余代码分隔开。

4. Spring 中配置 Bean 的方式:

基于XML的配置
	
	基于注解的配置
	
	基于Java的配置

5.Spring核心(学习IOC和AOP)

(1)参考如下文章:
1.依赖注入,参考马大师的文章,因为这个是最先他提出来的
参考:
https://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E4%BE%A7%E9%9D%A2%E7%9A%84%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1

(2)Java应用 - 从嵌入式应用程序到多层服务器端架构的企业应用程序 - 通常由多个应用服务协作完成应用程序的所有功能。因此,应用程序中的对象彼此依赖。

尽管JDK提供了丰富的类库开发功能,但它缺乏将基本对象组织成一个整体的方法,所以这个就是留给架构师和开发人员的一个任务。虽然开发人员可以使用诸如Factory,Abstract Factory,Builder,Decorator和Service Locator 之类的设计模式来组成和优化各种类和对象实例,但这些设计模式也只是总结出来的最佳实践,是开发人员和架构师必须在应用程序中自己实现的内容。

Spring框架的控制反转(IoC)模块通过提供一种将不同对象和框架组合成一个可以使用的应用架构的方法来解决这一问题。Spring 将设计模式通过框架集成到您自己的应用程序中。因此用户可以通过使用Spring来优化和维护自己的应用程序。

IOC和DI: https://how2j.cn/k/spring/spring-ioc-di/87.html#nowhere

(3)

IOC讲解:
  1. IoC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IoC 思想。
  2. Spring 提供了两种 IoC 容器,分别为 BeanFactory 和 ApplicationContext .
BeanFactory :
  1. BeanFactory 是基础类型的 IoC 容器,它由 org.springframework.beans.facytory.BeanFactory 接口定义,并提供了完整的 IoC 服务支持。简单来说,BeanFactory 就是一个管理 Bean 的工厂,它主要负责初始化各种 Bean,并调用它们的生命周期方法。
    BeanFactory 接口有多个实现类,最常见的是 org.springframework.beans.factory.xml.XmlBeanFactory,它是根据 XML 配置文件中的定义装配 Bean 的。
    创建 BeanFactory 实例时,需要提供 Spring 所管理容器的详细配置信息,这些信息通常采用 XML 文件形式管理。其加载配置信息的代码具体如下所示:
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("D://applicationContext.xml"));
ApplicationContext :
ApplicationContext 是 BeanFactory 的子接口,也被称为应用上下文。该接口的全路径为 org.springframework.context.ApplicationContext,它不仅提供了 BeanFactory 的所有功能,还添加了对 i18n(国际化)、资源访问、事件传播等方面的良好支持。

在使用 Spring 框架时,可以通过实例化其中任何一个类创建 Spring 的 ApplicationContext 容器。

需要注意的是,BeanFactory 和 ApplicationContext 都是通过 XML 配置文件加载 Bean 的。

  1. 二者的主要区别在于,如果 Bean 的某一个属性没有注入,则使用 BeanFacotry 加载后,在第一次调用 getBean() 方法时会抛出异常,而 ApplicationContext 则在初始化时自检,这样有利于检查所依赖的属性是否注入。因此,在实际开发中,通常都选择使用 ApplicationContext,而只有在系统资源较少时,才考虑使用 BeanFactory。
  2. 控制反转容器&依赖注入模式 —> DI(依赖注入)的三种方式:
  • 构造器注入
  • Setter方法注入
  • 接口注入
  1. 例子:
    控制反转显然是一个抽象的概念,我们举一个鲜明的例子来说明。

在现实生活中,人们要用到一样东西的时候,第一反应就是去找到这件东西,比如想喝新鲜橙汁,在没有饮品店的日子里,最直观的做法就是:买果汁机、买橙子,然后准备开水。值得注意的是:这些都是你自己“主动”创造的过程,也就是说一杯橙汁需要你自己创造。

容器restarting 容器框架下载_容器restarting_04


然而到了今时今日,由于饮品店的盛行,当我们想喝橙汁时,第一想法就转换成了找到饮品店的联系方式,通过电话等渠道描述你的需要、地址、联系方式等,下订单等待,过一会儿就会有人送来橙汁了。

容器restarting 容器框架下载_spring_05


请注意你并没有“主动”去创造橙汁,橙汁是由饮品店创造的,而不是你,然而也完全达到了你的要求,甚至比你创造的要好上那么一些。

传统的方式:
通过new 关键字主动创建一个对象

容器restarting 容器框架下载_spring_06

IOC方式:
对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制 (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了Spring。

(4)

面向切面编程(AOP):

Spring AOP 是基于 AOP 编程模式的一个框架,它的使用有效减少了系统间的重复代码,达到了模块间的松耦合目的。

  1. 优点:
    它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效率。
  2. AOP相关术语:
  3. Spring AOP中的动态代理主要有两种方式:
    JDK动态代理和CGLIB动态代理