Spring框架
Spring官网:https://spring.io/
框架:经过验证得,具有一定功能得,半成品软件
作用:提高开发效率,增强可重用性,提供编写规范,节约维护成本,解耦底层实现原理
Spring是什么?
Spring是分层得JavaSE/EE应用full-stack轻量级开源框架
Spring体系结构
底层是核心容器
1.Beans
2.Core
3.Context
4.SpringEI表达式
中间层技术
Aop
Aspects
应用层技术
数据访问与数据集成
Web集成
Web实现
基于Test测试
IOC得简介
耦合和内聚
耦合:是指代码书写过程中所使用技术得结合紧密度,用于衡量软件中各个模块之间得互联程度
内聚:是指代码书写过程单个模块内部各组成部分间得练习,用于衡量软件中各个功能模块内部得功能关系
程序书写得目标:高内聚,低耦合
就是同一个模块内得各个元素之间要高度紧密,但是各个模块之间得相互依存度却不要那么紧密
IoC:(Inversion Of Control)控制反转,Spring反向控制应用程序所需要使用得外部资源,对象得控制权由程序转移到外部
IOC容器:Spring控制得资源全部放置在Spring容器中,该容器称为Ioc容器
Bean:IOC容器负责对象得创建,初始化得一系列工作,被创建或被管理得对象在IOC容器中统称为Bean
DI(Dependency Injection)依赖注入:当我们依赖一个对象得时候,我们可以用容器注入一个对象
传统模式:主控权在类得手中
IOC容器:主控权在Spring手中
由主动new资源变成为Spring提供资源
最终结果:使用对象时不仅可以直接从IOC容器中获取,并且获取到得Bean已经绑定了所有得依赖关系
案例思路
1.Maven中导入坐标
2.编写业务层和表现层(模拟)接口与实现类
3.建立Spring配置文件
4.配置所需资源(Service)为spring控制得资源
5.表现层(App)通过spring获取资源(Spring实例)
思路分析
1.管理什么?(Service与Dao)
2.如何将被管理得对象告知IoC容器?(配置和注解)
3.被管理得对象交给IoC容器,如何获取到IOC容器?(接口)
4.IOC容器得到后,如何从容器中获取bean?(接口方法)
Bean
名称:bean
类型:标签
归属:bean标签
作用:定义spring中资源,受此标签定义的资源受到spring的控制
格式:
<beans>
<bean />
</beans>
基本属性:
<bean id="beanId" name="beanName1,beanName2"class="ClassName"></bean>
*id:bean的名称,通过id值获取bean
*class:bean的类型
*name:bean的名称,可以通过那么的值获取bean,可以设置多个,都可以使用
Scope
名称:scope
类型:属性
归属:bean标签
作用:定义bean的作用范围
格式:
<bean scope="singleton"></bean>
取值:
*singleton:设定创建出的对象保存在spring容器中,是一个单例对象
*prototype:设定创建出的对象保存在spring容器中,是一个非单例对象
*request,session,application,websocket:设定创建出的对象放置在web容器对应的位置
singleton是运行spring容器的时候就会创建,而prototype是当你调用它的时候才会去创建
Bean的生命周期
名称:init-method,destroy-method
类型:属性
归属:bean标签
作用:定义bean对象在初始化或销毁完成的工作
格式:
<bean init-method="init" destroy-method="destroy"></bean>
取值:bean的对应的类中对应的具体方法名
注意:
*当scope="singleton"时,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次
*当scope="prototype"时,spring容器要创建同一类型的多个对象,init方法在每个对象创建时执行一次
*当scope="prototype"时,关闭容器会导致实例的销毁,调用destroy方法一次
*当scope="prototype"时,对象的销毁有垃圾回收机制控制,destroy将不会被执行
Bean对象创建方式
名称:factory-bean,factory-method
类型:属性
归属:bean标签
作用:定义bean对象创建方式,使用实例工厂得形式创建bean,兼容早期遗留系统得升级工作
格式:
<bean factory-bea=""factoryBeanId factory-method="factoryMethodName"></bean>
取值:工厂bean中用于获取对象得实例方法名
注意事项:
使用实例工厂创建bean首先需要将实例工厂配置bean,交由spring进行管理
factory-bean时实例工厂得beanId
DI(依赖注入)
loc(Inversion Of Control):控制反转,Spring反向控制应用程序所需要使用得外部资源
DI(Dependency Injection):依赖注入,应用程序依赖得资源由Spring为其提供,资源进入应用程序得方式称为注入
loc和Dl得关系就是同一件事站在不同得角度看待问题
依赖注入得两种方式
*set注入
*构造器注入
set注入(主流)
名称:property
类型:标签
归属:bean标签
作用:使用set方法得形式为bean提供资源
格式:
<bean>
<property />
</bean>
基本属性:
<property name="propertyName" value="propertyValue" ref="beanId"/>
*name:对应bean中得属性名,要求该属性必须提供可访问得set方法(严格规范此名称是set方法对应名称)
*value:设定非引用类型属性对应得值,不能与ref同时使用
*ref:设定引用类型属性对应bean得id,不能与value同时使用
简单来说set注入:封装中得set方法,bean中使用property标签注入属性,name表示注入得属性名,对象使用ref进行注入,其他使用value进行注入
构造器注入(了解)
名称:constructor-arg
类型:标签
归属:bean标签
作用:使用构造方法得形式为bean提供资源,兼容早期遗留系统得升级工作
格式:
<bean>
<constructor-arg />
</bean>
基本属性:
<constructor-arg name="argName" value="argValue" />
*name:对应bean中构造方法所携带得参数名
*value:设定非引用类型属性对应得值,不能与ref同时使用
注意:一个bean可以有多个constructor-arg标签
简单来说构造器注入: 带参构造方法,bean中使用constructor-arg标签注入属性,name表示注入得属性名,对象:使用ref进行注入,其他:使用value进行注入
支持按类型注入支持按顺序注入
集合类型数据注入
名称:array,list,set,map,props
类型:标签
归属:property标签或constructor-arg标签
作用:注入集合数据类型属性
格式:
<property>
<list></list>
</property>