目录
1.1 、Spring概述
1.2 、Spring家族
1.3 、Spring Framework
1.3.1 、Spring Framework特性
1.3.2 、Spring Framework五大功能模块
IOC容器
IOC思想
IOC容器在Spring中的实现
基于XML管理bean
实验一:入门案例
如何获取bean
1.1 、Spring概述
官网地址:Spring | Home
Spring 是最受欢迎的企业级Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用
Spring 框架来创建性能好、易于测试、可重用的代码。
Spring 框架是一个开源的Java 平台,它最初是由Rod Johnson 编写的,并且于2003 年6 月首次在Apache 2.0 许可下发布。
Spring 是轻量级的框架,其基础版本只有2 MB 左右的大小。
Spring 框架的核心特性是可以用于开发任何Java 应用程序,但是在Java EE 平台上构建web 应用程序是需要扩展的。Spring 框架的目标是使J2EE 开发变得更容易使用,通过启用基于POJO 编程模型来促进良好的编程实践。
1.2 、Spring家族
项目列表:Spring | Projects
1.3 、Spring Framework
Spring 基础框架,可以视为Spring 基础设施,基本上任何其他Spring 项目都是以Spring Framework
为基础的。
1.3.1 、Spring Framework特性
- 非侵入式:使用Spring Framework 开发应用程序时,Spring 对应用程序本身的结构影响非常
小。对领域模型可以做到零污染;对功能性组件也只需要使用几个简单的注解进行标记,完全不会 破坏原有结构,反而能将组件结构进一步简化。这就使得基于Spring Framework 开发应用程序时结构清晰、简洁优雅。
- 控制反转:IOC——Inversion of Control,翻转资源获取方向。把自己创建资源、向环境索取资源变
成环境将资源准备好,我们享受资源注入。
- 面向切面编程:AOP——Aspect Oriented Programming,在不修改源代码的基础上增强代码功能。
- 容器:Spring IOC 是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管
理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发 效率。
- 组件化:Spring 实现了使用简单的组件配置组合成一个复杂的应用。在Spring 中可以使用XML 和
Java 注解组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭建超大型复杂应用系统。
- 声明式:很多以前需要编写代码才能实现的功能,现在只需要声明需求即可由框架代为实现。 一站
式:在IOC 和AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且Spring 旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在Spring Framework 的基础上全部使用Spring 来实现。
1.3.2 、Spring Framework五大功能模块
功能模块 | 功能介绍 |
Core Container | 核心容器,在Spring 环境下使用任何功能都必须基于IOC 容器。 |
AOP&Aspects | 面向切面编程 |
Testing | 提供了对junit 或TestNG 测试框架的整合。 |
Data Access/Integration | 提供了对数据访问/集成的功能。 |
Spring MVC | 提供了面向Web应用程序的集成功能。 |
IOC容器
IOC思想
IOC:Inversion of Control,翻译过来是反转控制。
① 获取资源的传统方式
在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。
②反转控制方式获取资源
反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方式----改有容器主动将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。
③DI
DI:Dependency Injection,翻译过来是依赖注入。
DI 是IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。
所以结论是:IOC 就是一种反转控制的思想,而DI 是对IOC 的一种具体实现。
IOC容器在Spring中的实现
Spring 的IOC 容器就是IOC 思想的一个落地的产品实现。IOC 容器中管理的组件也叫做bean。在创建bean 之前,首先需要创建IOC 容器。Spring 提供了IOC 容器的两种实现方式:
①BeanFactory
这是IOC 容器的基本实现,是Spring 内部使用的接口。面向Spring 本身,不提供给开发人员使用。
②ApplicationContext
BeanFactory 的子接口,提供了更多高级特性。面向Spring 的使用者,几乎所有场合都使用
ApplicationContext 而不是底层的BeanFactory。
③ApplicationContext的主要实现类
类型名 | 简介 |
ClassPathXmlApplicationContext | 通过读取类路径下的XML 格式的配置文件创建IOC 容器对象 |
FileSystemXmlApplicationContext | 通过文件系统路径读取XML 格式的配置文件创建IOC 容器对象 |
ConfigurableApplicationContext | ApplicationContext 的子接口,包含一些扩展方法 refresh() 和close() ,让ApplicationContext 具有启动、关闭和刷新上下文的能力。 |
WebApplicationContext | 专门为Web 应用准备,基于Web 环境创建IOC 容器对象,并将对象引入存入ServletContext 域中。 |
我们常用到的就是ClassPathXmlApplicationContext类,简单说就是帮开发人员创建对象。
基于XML管理bean
实验一:入门案例
1、创建maven工程
2、引入依赖
<dependencies>
<!-- 基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.1</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
3、创建类HelloWorld
public class HelloWorld {
public void sayHello(){
System.out.println("helloworld");
}
}
4、创建Spring的配置文件
applicationContext.xml
5、在Spring的配置文件中配置bean
<!--
配置HelloWorld所对应的bean,即将HelloWorld的对象交给Spring的IOC容器管理 通过bean标签配置IOC容器所管理的bean
属性:
id:设置bean的唯一标识
class:设置bean所对应类型的全类名
-->
<bean id="helloworld" class="com.softeem.bean.HelloWorld"></bean>
6、创建测试类测试
@Test
public void testHelloWorld(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld helloworld = (HelloWorld) ac.getBean("helloworld");
helloworld.sayHello();
}
ICO容器就会帮我们创建bean类的对象,直接调用类中方法。
整个过程也就是:自定义的实体类在Spring配置文件中进行配置,就是实验中applicationContext.xml文件中bean标签中的内容。然后IOC容器对象ClassPathXmlApplicationContext对配置文件进行读取,创建类对象。然后就可以使用该对象进行一些方法的调用等等...
如何获取bean
①方式一:根据id获取
由于id 属性指定了bean 的唯一标识,所以根据bean 标签的id 属性可以精确获取到一个组件对象。上个实验中我们使用的就是这种方式。
②方式二:根据类型获取
@Test
public void testHelloWorld(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld bean = ac.getBean(HelloWorld.class);
bean.sayHello();
}
③方式三:根据id和类型
@Test
public void testHelloWorld(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld bean = ac.getBean("helloworld", HelloWorld.class); bean.sayHello();
}
以上三种方式都可以获取bean,但要注意的是:
当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个
那么一个spring框架就使用起来了...