什么是Spring框架
Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率。第一个版本出现在2004年,由美国的sun公司开发,是Java领域最成功的框架。
其成功来自于设计理念,而不是技术。
最核心的理念是Ioc(控制反转)和AOP(面向切面编程)。
Ioc是Spring的基础,AOP是Spring的重要的功能,最典型的应用是数据库的事务处理。
spring框架的核心功能
Spring框架的核心功能有两个:
1、Spring容器作为超级大工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean。
2、Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为"依赖注入"的方式来管理Bean之间的依赖关系。
Spring框架的优点
低侵入式设计,代码的污染极低。
独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺。
Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦。
Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用。
Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。
Spring框架的核心机制
Bean
bean就是实体类
Spring框架管理bean是通过两种方法
- ClassPathXmlApplicationContext
从类加载路径下搜索配置文件,并根据配置文件来创建Spring容器。
实现了ApplicationContext接口,该类可以用于初始化Ioc容器
- FileSystemXmlApplicationContext
:从文件系统的相对路径或绝对路径下去搜索配置文件,并根据配置文件来创建Spring容器。
Bean定义的过程:
- Resource定位
Spring Ioc容器根据开发者的配置进行资源定位。在Spring开发中,可以通过xml或 注解的方式进行资源配置,配置的内容由开发者提供
- BeanDefinition的载入
是将Resource定位到的信息,保存到Bean定义中(BeanDefinition),但是不会创建Bean实例
- BeanDefinition的注册
将BeanDefinition中定义的信息发布到Ioc容器中
- 创建Bean实例
当开发者调用getBean方法时Ioc容器会生成一个Bean实例
Ioc(Inverse of Control 控制反转)
也叫依赖注入(Dependency Injection);其中心思想是以配置文件来管理Java实例的协作关系
使用Spring框架时,调用者无需主动获取被依赖对象,调用者只要被动接受Spring容器为调用者的成员变量赋值即可,使用Spring后,调用者获取被依赖对象的方式由原来的主动获取,变成了被动接受——称之为控制反转。
Spring容器负责将被依赖对象赋值给调用者的成员变量——相当于为调用者注入它依赖的实例,因此称之为依赖注入。
Ioc主要基于两个接口:
- BeanFactory:
BeanFactory接口是Spring Ioc容器的最底层接口
BeanFactory中的方法
方法 | 描述 |
---|---|
getBean() | 用于获取配置给Spring Ioc容器的Bean。参数可以是字符串,也可以是Class类型 |
isSingleton() | 用于判断是否单例。若判断为真,则表示从容器中获取的bean是唯一的。默认是true |
isPrototype() | 与isSingleton()相反,若为真,容器会生成一个新的实例 |
- ApplicationContext:
ApplicationContext是BeanFactory的子接口。对BeanFactory接口进行了很多有用的扩展,ApplicationContext在绝大部分的工作场景下都使用ApplicationContext Spring IoC容器
Idea整合spring
使用maven的webapp模板创建一个idea项目
导入使用Spring框架需要的jar包
将Speing版本号放入<properties>内部
<!-- Spring统一版本号 -->
<springVersion>5.1.1.RELEASE</springVersion>
在<dependencies>中放入需要的jar包
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>