Spring
一,Spring课程工程构建
1.使用maven创建一个Spring_ioc的项目
二,Spring的内容
1.Spring简介
1.1.Spring是什么
Spring是分层的JavaSE/EE/应用full-stack轻量级开源框架,以IoC(Inverse of Controller:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核.
提供展现层SpringMVC和持久层Spring JDBCTemplate以及业务层事务管理等众多的企业级应用技术,还能整合世界众多的著名第三方框架和类库,逐渐成为使用最多的JavaEE企业应用开源框架.
1.2.Spring发展历程
1.3.Spring的优势
1.方便解耦,简化开发
2.AOP编程的支持(面向切面编程)
3.声明式事务的支持
4.方便程序的测试
5.方便集成各种优秀框架
6.降低JavaEE API的使用难度
7.Java源码是经典学习范例
1.4.Spring的体系结构
2.Spring中IOC容器快速入门
IOC容器往里面放bean,往里面取bean,
概述:IOC(inverse of controller:控制反转),这里的控制反转指的是:bean与bean之间的依赖关系,以前如果一个User类依赖对应的Order类,那么在 User类执行功能的过程中,一定会创建Order类的实例,这里就是User类主动创建了Order类,类与类之间的耦合性就会很高,与程序设计原则背离.而IOC容器则是将User类和Order类放在IOC容器中,当User类需要Order类时,就将Order类注入到User类当中,控制权就在IOC的手上,被注入的一方只能被动接受,至此完成了控制权的转换,这一切都是通过spring核心配置文件来完成的.spring核心配置文件通过xml文件来配置(后面讲解通过注解来配置)
例:以dao层的实现类对象为例
- 在.pom文件中导入Spring开发的基本包坐标
- 编写Dao接口和实现类
- 创建Spring核心配置文件
- 在Spring配置文件中配置UserDaoImpl(相当于把bean放进容器当中)
- 使用Spring的API获得Bean实例
3.Spring配置文件
3.1.通常命名为applicationContext.xml,介绍当中的标签和属性
基本标签:<beans></beans> 用来配置众多的bean
基本标签:<bean></bean> 用来配置具体的bean
- 基本属性:id Bean实例在spring容器中的唯一标识
- 基本属性:class Bean的全类名名称(底层是通过反射来动态获取对象)
- 基本属性:scope 指对象的作用范围,取值如下默认值:singleton(单例的,该Bean只为单例模式,每次都是同一个,当核心配置文件加载完成时,就会创建),prototype(多例的,每次new一个新的实例,每次调用getBean方法创建)
- 基本属性:init-method 指定类中的初始化方法名称
- 基本属性:destroy-method 指定类中销毁方法名称
- 基本属性:factory-method 指定静态工厂中的静态方法(一般用于实例化bean)
- 基本属性:factory-bean 指定工厂实例方法来实例化bean
3.2.bean的实例化
- 默认无参构造实例化(常用) : 配置好bean后,加载spring核心配置文件后得到应用上下文对象,调用当中的getBean方法,实例化bean
- 工厂静态方法实例化(理解) : 创建一个静态工厂类,定义一个静态方法返回需要实例化的bean,将静态工厂类添加到IOC容器当中,实例化该工厂调用该工厂中的静态方法实例化bean.
- 工厂实例方法实例化(理解) : 创建一个工厂类,定义一个方法返回需要实例化的bean,将工厂类添加到IOC容器当中,然后通过factory-bean引用,在通过factory-method掉实例方法,达到实例化bean的效果
3.3.依赖注入
3.3.1.依赖注入的方式
-
set方法注入
使用到的标签和属性(标签为bean标签的子标签)
注入对象属性
<property name="set方法后的方法名" ref="被注入的对象id"></property>
注入普通属性
<property name="属性名" value="属性值"></property>
注入list集合属性
<proerty name="属性名">
<list>
<value>值1</value>
<value>值2</value>
<value>值3</value>
</list>
</proerty>
注入map集合属性
<proerty name="属性名">
<map>
<entry key="map集合的键" valueref="map集合的值"></entry>
<entry key="map集合的键" valueref="map集合的值"></entry>
<entry key="map集合的键" valueref="map集合的值"></entry>
</map>
</proerty>
注入properties集合属性
<property name="属性名">
<props>
<prop key="properties集合的键">值1</prop>
<prop key="properties集合的键">值2</prop>
<prop key="properties集合的键">值3</prop>
</props>
</property>
- 带参构造注入
注入对象属性
<constructor name="属性名" ref="被注入对象id"></constructor>
注入普通属性
<constructor name="属性名" value="属性值"></constructor>
注入list集合属性
<constructor name="属性名">
<list>
<value>值1</value>
<value>值2</value>
<value>值3</value>
</list>
</constructor>
注入map集合属性
<constructor name="属性名">
<map>
<entry key="map集合的键" valueref="map集合的值"></entry>
<entry key="map集合的键" valueref="map集合的值"></entry>
<entry key="map集合的键" valueref="map集合的值"></entry>
</map>
</constructor>
注入properties集合属性
<constructor name="属性名">
<props>
<prop key="properties集合的键">值1</prop>
<prop key="properties集合的键">值2</prop>
<prop key="properties集合的键">值3</prop>
</props>
</constructor>
- 命名空间注入(本质为set方法注入)
3.3.2.依赖注入分类
-
对象属性注入 例:将dao的实现类注入到service的实现类当中,然后在service实现类中定义方法实现dao实现类的功能
-
普通属性注入
-
集合属性注入(list,map,properties)
3.4.<import>标签
实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积庞大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载
例:<import resource="applicationContext-xxx.xml" />
4.Sping相关API
4.1.ApplicationContext接口:代表应用上下文,可以通过其实例获得Spring容器中的Bean对象
实现类:
- ClassPathXmlApplicationContext:从类的根路径下加载配置文件,推荐使用这种
- FileSystemXmlApplicationContext:从磁盘路径上加载配置文件
- AnnotationConfigApplicationContext:使用注解配置容器对象时,需要使用此类来创建spring容器,他用来读取注解
方法:
getBean():
- 当参数的数据类型是字符串时,表示根据bean的id从容器中获得bean实例,返回数据类型为Object,需要强转.
- 当参数的数据类型是Class类型,表示根据类型从容器中匹配bean实例,当容器中相同的类型的bean有多个时,则此方法会报错.