一.Spring总概
二.知识点概述
(1)Spring容器=Spring IOC 容器
- Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。这些对象被称为 Spring Beans。
- Spring容器实现的两种方式:
- BeanFactory容器:IOC容器的基本实现,它主要的功能是为依赖注入 (DI) 提供支持
在 Spring 中,有大量对 BeanFactory 接口的实现。其中,最常被使用的是 XmlBeanFactory 类。
这个容器从一个 XML 文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。 - ApplicationContext容器:它是BeanFactory的子接口,包含BeanFactory 容器的所有功能,并提供了更多的高级特性
ConfigurableAppcationContext:ApplicationContext的子接口
(有ConfigurableAppcationContext.refresh()刷新、close()关闭等方法)
最常被使用的 ApplicationContext 接口实现:
FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径
ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。 - 两者区别:
- BeanFactory 粗暴简单,可以理解为就是个 HashMap,Key 是 BeanName,Value 是 Bean 实例。通常只提供注册(put),获取(get)这两个功能。我们可以称之为“低级容器”
- ApplicationContext 可以称之为 “高级容器”。因为他比 BeanFactory 多了更多的功能。他继承了多个接口。因此具备了更多的功能。例如资源的获取,支持多种消息(例如 JSP tag 的支持),对 BeanFactory 多了工具级别的支持等待。所以你看他的名字,已经不是 BeanFactory 之类的工厂了,而是 “应用上下文”, 代表着整个大容器的所有功能。该接口定义了一个 refresh 方法,此方法是所有阅读 Spring 源码的人的最熟悉的方法,用于刷新整个容器,即重新加载/刷新所有的 bean。
- 总结:IoC 在 Spring 里,只需要低级容器就可以实现,2 个步骤:
- 加载配置文件,解析成 BeanDefinition 放在 Map 里。
- 调用 getBean 的时候,从 BeanDefinition 所属的 Map 里,拿出 Class 对象进行实例化,同时,如果有依赖关系,将递归调用 getBean 方法 —— 完成依赖注入。
上面就是 Spring 低级容器(BeanFactory)的 IOC原理。
至于高级容器 ApplicationContext,他包含了低级容器的功能,当他执行 refresh 模板方法的时候,将刷新整个容器的 Bean。同时其作为高级容器,包含了太多的功能。一句话,他不仅仅是 IoC。他支持不同信息源头,支持 BeanFactory 工具类,支持层级容器,支持访问文件资源,支持事件发布通知,支持接口回调等等。
- BeanFactory容器:IOC容器的基本实现,它主要的功能是为依赖注入 (DI) 提供支持
- 依赖注入:当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IoC容器来完成,然后注入调用者,因此也称为依赖注入。依赖注入的方式有两种:构造器注入和setter注入。
- 自动装配:开发人员不必知道具体要装配哪个bean的引用,这个识别的工作会由spring来完成。与自动装配配合的还有“自动检测”,这个动作会自动识别哪些类需要被配置成bean,进而来进行装配。这样我们就明白了,自动装配是为了将依赖注入“自动化”的一个简化配置的操作。
- 依赖注入与装配的关系:依赖注入的本质就是装配,装配是依赖注入的具体行为。
- 依赖注入与装配的关系:依赖注入的本质就是装配,装配是依赖注入的具体行为。
- 基于 XML 的配置文件和基于注解的配置都是为了依赖注入。
@configuration和@bean:Spring 基于 Java 的配置_w3cschool、SpringBoot - @Configuration、@Bean注解的使用详解(配置类的实现)
spring注解大全:Spring注解大全详情,_D哈迪斯的博客-CSDN博客_spring注解
(2)AOP
(3)Spring JDBC框架
(4)Spring WEB MVC框架
(5)事务处理