Spring的简介安装及配置

本文将介绍Spring框架的基本概念,包括IOC和AOP的核心思想,以及如何进行安装和配置。我们将探讨Bean的管理,注解的使用,并通过实例展示Spring的初始化过程。
摘要由CSDN通过智能技术生成

Spring

Spring简介
Spring框架是一种轻量级的、一站式的企业级开发解决方案
框架(framework):是一组设计思想、规范、API的精心组合,专门用来解决某一层次或领域的问题
轻量级(lightweight):此处是相对于EJB框架来说的,在资源占用、开发部署维护、学习成本等方面Spring都比
EJB轻便。
一站式(full-stack):即一步到位,Spring本身提供了丰富的功能特性,又直接整合了一批优秀框架,对于那些
没有直接整合的其他框架,也提供了一层简单的封装让开发人员可以方便的手动整合,即Spring可以满足项目各个
层次的要求。
整个Spring有三个核心模块:Spring容器、Spring AOP、声明式事务管理。
Spring框架有众多模块,各个模块相互独立又能很好的合作

spring模块

就我们现阶段的学习目标来说,上面这张图太过复杂,可简化如下:

spring模块

Spring容器
Spring容器是Spring的核心之一,用来存放、管理bean,也称为bean容器
bean:被Spring容器管理的Java对象称为bean,比如service类的对象、dao类的对象等。整个项目的运行是由各
种bean支撑起来的,每个bean都是构成项目的一个组件。
Spring容器对bean的管理包括:创建、注入依赖、初始化、销毁等。开发人员通过配置的方式指定Spring如何管
理bean。

配置方式有两种:XML文件和注解

为什么要把对象交给Spring容器管理呢?

1 Spring必须把对象统一管理起来,才能实现其他功能特性,也就是说Spring提供的其他功能特性绝大部分都依赖
Spring容器
2 开发人员不用自己编码管理这些对象,可以专注于实现业务逻辑
3 使对象的使用和创建相分离,方便修改和扩展

Spring核心配置文件
Spring可在XML配置文件中定义bean、管理bean,配置文件的根元素是<beans>,文件名任意,课程中命名为
beans.xml,另外也经常使用applicationContext.xml等名称。
Spring模块众多,可配置大量内容,Spring提供了多个schema文件分类描述这些内容,平时使用时,可以把常用的
schema都引入配置文件中。

bean定义
可以使用<bean>标签配置、管理bean
id属性指定bean的id,使用时可以通过id找到该bean
name属性指定bean的名称,和id作用一样
class属性指定这个bean所表示的Java类的对象
一个<bean>标签就是一个bean定义,需要注意的是bean的本质是Java对象,而bean定义的本质是配置信息,但有
些时候我们说bean,也可能表示bean定义,可根据具体语境进行区分,或者不用区分。
这种使用class属性指定bean类型的配置方式,Spring在创建bean时会直接使用类的构造函数创建。

容器对象:ApplicationContext
ApplicationContext是Spring的上下文对象,代表整个Spring框架,基本上也就代表了整个应用程序,它同时也
是Spring容器对象,所有的bean都保存在这个对象中。
ApplicationContext有多种创建方式,普通Java项目中可以使用ClassPathXmlApplicationContext创建,创建
时需要指定beans.xml在类路径下的位置。
Spring容器在创建的时候,会先读取所有的bean定义并保存起来,然后创建出bean,默认以单例的方式管理bean
getBean()用来在Spring容器中查找并返回bean,可以根据id或name查找,也可以根据类型查找。如果找不到会
抛出异常,特别的,根据类型查找时如果找到多个也会抛出异常。

其他创建bean的方式
即工厂方式和静态工厂方式,适合创建那些需要很多参数的对象

工厂方式:使用工厂对象的方法创建bean

静态工厂方式:使用工厂类的静态方法创建bean

这三种创建bean的方式中,开发人员一般直接使用构造函数方式,Spring本身或者其他第三方框架一般使用工厂方
式或静态工厂方式。

bean的作用域
在Spring中,可以指定bean的作用范围,默认是singleton(单例),即整个Spring容器运行期间该bean定义只会
创建一个Java对象。

使用scope属性指定bean的作用域,可选值如下:
singleton:单例
prototype:原型,每次从容器中获取时都返回新的对象
request:对于每个HTTP请求都会创建一个新的对象
session:每个HTTP会话创建一个新的对象
globalSession:每个HTTP全局会话创建一个新的对象
application:每个ServletContext创建一个新的对象

虽然bean的作用域有多种,但只使用singleton和prototype已经满足绝大部分的需求,其他很少使用
有时候也把bean的作用域说成生命周期(含义很相似),另外生命周期也指bean从创建到销毁的过程(大家需要
知道这个情况)。

依赖注入
Spring可以把beanA所依赖的其他bean或者普通值(int、String)注入到beanA中,即依赖注入——DI
(Dependency Inject)。

基于setter方法的注入
使用<property>标签完成注入,可以使用ref属性指定依赖的bean的名称,也可以使用value属性注入普通值
(int、String等),甚至还可以注入集合。

基于构造函数的注入
<constructor-arg>标签用来给构造函数注入参数,可以使用index属性指定参数的索引位置,也可以使用name
属性指定参数的名称。
setter方式的注入比构造函数方式的注入更常用一些。

控制反转(IoC)
在使用Spring之前,开发人员需要自己创建对象,并手动把依赖设置到对象中;现在,只需要通过配置,就可以把
创建对象、注入依赖的操作交给Spring去完成,这种改变称为控制反转——IoC(Inversion of Control)。其实
IoC和DI几乎是等价的,不用刻意区分。
具有IoC功能的容器被称为IoC容器,所以Spring容器也是IoC容器。现在,ApplicationContext对象可以称为
Spring上下文对象、Spring容器、bean容器、IoC容器等。
控制反转把对象的创建和使用分离开来(解耦合),让开发人员可以更加专注于实现业务逻辑,另外还使得项目更
易维护和扩展。

bean定义的其他配置项
abstract属性可以把bean定义成抽象的,用来被其他bean继承,本身并不会创建对象
parent属性用来指定要继承哪个bean定义
init-method属性用来指定创建bean对象后执行的初始化方法(值为方法名)

bean的总的创建过程为:
1 Spring扫描并保存配置文件中的bean定义
2(开始依次创建对象)创建一个对象之后,如果所有的依赖都已存在,则注入所有依赖,然后执行init-method
(否则不注入也不执行init-method)。
3(等所有的对象都创建出来之后)为还没有注入依赖的bean注入所有依赖,然后执行init-method
可以简化为:创建对象—> 注入依赖 —> init-method
destroy-method 用来指定销毁bean前执行的销毁方法,只对singleton作用域的bean有效(调用
AbstractApplica
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值