Spring学习(一)
Spring是啥?
- Spring是一个开源框架,为解决企业应用开发的复杂性二创建的,但现在已经不止应用与企业应用;
- 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架;
- 从大小与开销两方面而言Spring都是轻量的;
- 通过控制反转(IoC)的技术达到松耦合的目的;
- 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发;
- 包含并管理应用对象的配置和生命周期,这个意义上是一种容器
- 将简单的组件配置、组合成为复杂的应用,这个意义上是框架。
为什么是Spring?
- 在Spring上开发应用简单;
- 在Spring上开发应用方便;
- 在Spring上开发应用快捷。
Spring带来了复杂的JavaEE开发的春天。
Spring框架的主要模块
从下往上看分别是:
- 单元测试
- 核心容器,包括bean容器
- 功能组件:AOP、Aspects、Instrumentation、Messaging
- 应用与数据继承或者web
什么是IOC
IOC:控制反转,控制权的转移,应用程序本身并不负责依赖对象的创建和维护,而是由外部容器负责创建和维护。
DI:依赖注入,是其一种实现方式。依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?
目的:创建对象并且组装对象之间的关系。
在Java中依赖注入有以下三种实现方式:
- 构造器注入
- Setter方法注入
- 接口注入
Bean容器初始化之BeanFactory和ApplicationContext
-
BeanFactory 可以理解为含有bean集合的工厂类。BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化。
-
BeanFactory还能在实例化对象的时生成协作类之间的关系。此举将bean自身与bean客户端的配置中解放出来。
-
BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。
从表面上看,applicationContext如同bean factory一样具有bean定义、bean关联关系的设置,根据请求分发bean的功能。但applicationContext在此基础上还提供了其他的功能。
- 提供了支持国际化的文本消息
- 统一的资源文件读取方式
- 已在监听器中注册的bean的事件
applicationContext的三种实现方式:
- ClassPathXmlApplicationContext:从classpath的XML配置文件中读取上下文,并生成上下文定义。应用程序上下文从程序环境变量中取得。
ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);
- FileSystemXmlApplicationContext :由文件系统中的XML配置文件读取上下文。
ApplicationContext context = new FileSystemXmlApplicationContext(“bean.xml”);
- XmlWebApplicationContext:由Web应用的XML文件读取上下文。
什么是spring beans
Spring bean 表示受到Spring管理的对象。具体说来,它是被Spring框架容器初始化、配置和管理的对象。Spring bean是在Spring的配置文件中定义(现在也可以通过annotation注解来定义),在Spring容器中初始化,然后注入到应用程序中的。
因为在最早的版本中,Spring是被设计用来管理JavaBean的,所以Spring管理的对象会被称为“bean”。当然,现在Spring已经可以管理任何对象,即使它不具备默认构造器和设置方法(getter和setter)这些JavaBean的特性。然而,”Spring bean“这个术语仍然被保存了下来。
Spring注入
Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为。
常用的两种注入方式:设值注入,构造注入。
依赖注入(DI)
关于DI,在W3Cschool上有一段很浅显易懂的话,搬过来给大家看看。
Spring 最认同的技术是控制反转的依赖注入(DI)模式。控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。
当编写一个复杂的 Java 应用程序时,应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用可能性,当进行单元测试时,可以使它们独立于其他类进行测试。依赖注入(或者有时被称为配线)有助于将这些类粘合在一起,并且在同一时间让它们保持独立。
到底什么是依赖注入?让我们将这两个词分开来看一看。这里将依赖关系部分转化为两个类之间的关联。例如,类 A 依赖于类 B。现在,让我们看一看第二部分,注入。所有这一切都意味着类 B 将通过 IoC 被注入到类 A 中。
依赖注入可以以向构造函数传递参数的方式发生,或者通过使用 setter 方法 post-construction。由于依赖注入是 Spring 框架的核心部分。