Spring
初始Srping
- Spring发展到今天已经形成了一种开发的生态圈,Spirng提供了若干项目,每个项目用于完成特点的功能
- 我们常说的Spring就是指Spirng Framework
Spring Framework 系统架构
- Spirng Framework是Spring生态圈中最基础的项目,是其他项目的基础
- Core Container:核心容器
- Data Access/Intergration:数据访问与数据集成
- AOP:面向切面编程;Aspects:AOP思想实现
- Transactions :事务
- 学习路线:
- 第一部分:核心容器(核心概念IOC/DI、容器基本操作)
- 第二部分:整合(整合数据层技术MyBatis)
- 第三部分:AOP(核心概念、AOP基础操作、AOP应用开发)
- 第四部分:事务(事务应用开发)
核心概念
-
IOC(Inversion of Control)控制反转
使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象控制权由程序转移到外部,此思想成为控制反转
-
Spring技术对IOC思想进行了实现
- Spring提供了一个容器,成为Ioc容器,用来充当Ioc思想中的外部
- Ioc容器负责对象的创建、初始化等一系列工作,被创建或管理的对象在Ioc容器中统称为Bean
-
DI(Dependency Injection) 依赖注入
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
-
目标:充分解耦
- 使用IOC容器管理bean (IOC)
- 在Ioc容器内将有依赖关系的bean进行关系绑定 (DI)
IOC入门案例
-
导入spring的坐标spring-context,对应版本是5.2.10.RELEASE
-
创建applicationContetx.xml文件,配置bean。其中bean标签标识配置bean,id熟悉表示给bean起名字,class属性表示给bean定义类型
-
获取IOC容器:
ApplicationContetx ctx = new ClassPathXmlApplicationContext("applicationContetx.xml");
-
获取bean,调用实例方法
BookDao bookDao = (BookDao)ctx.getBean("bookDao")
DI入门案例
-
思路分析
- 基于Ioc管理bean
- Service中使用new形式创建的Dao对象是否保留?:否
- Service中需要的Dao对象如何进入到Service中?:提供方法
- Service与Dao间的关系如何描述?:配置
-
删除业务层中使用new的方式来创建Dao层的对象
-
提供对应的set方法
-
配置Service与Dao的关系:Property标签表示配置当前bean的属性,name属性表示配置哪一个具体的属性,ref属性表示参照哪一个bean
bean配置
-
bean别名配置
name:定义bean的别名,可定义多个,使用,或者;或者 空格 进行分隔
-
bean作用范围
-
scope:定义bean的作用范围,可选范围为:singleton单例(默认)、prototype(非单例)
-
适合交给容器进行管理的bean:表现层对象,业务层对象,持久层对象,工具类对象
-
不适合交给容器进行管理的bean:封装实体的域对象
-
bean实例化
- bean本质上就是对象,创建bean使用构造方式完成
bean实例化--静态工程
-
定义OrderDaoFactor静态工程类,在静态代码块中 返回一个 new OrderDaoImpl()
-
xml配置
bean实例化--实例工厂与FactoryBean
bean生命周期
-
概念
-
生命周期:从创建到消亡的完整过程
-
bean生命周期:bean从创建到消亡的完整过程
-
bean生命周期控制:在bean创建后到销毁前做一些事情
-
-
初始化容器
- 创建对象(内存分配)
- 执行构造方法
- 执行属性注入
- 执行bean初始化
-
使用bean
执行业务操作
-
关闭/销毁容器
执行bean销毁方法
自动装配
- Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程成为自动装配
- 自动装配方式:按类型、按名称、按构造方法、不启动自动装配
- 特征:
- 自动装配引用类型依赖注入,不能对简单类型进行操作
- 使用按类型装配时(byType)必须保证容器中相同类型的bean唯一,推荐使用
- 使用按名称装配时(byName)必须保证容器中具有指定名称的bean,因变量名与配置耦合,不推荐
- 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配失效
- @Resource
- 默认是按照组件名称进行装配的;
AOP简介
-
概念:AOP面向切面编程,是一种编程范式,指导开发者如何组织程序结构
-
作用:在不惊动原始设计的基础上为其进行功能增强
-
AOP核心概念:
-
连接点:程序执行进程中的任意位置,粒度为执行方法、抛出异常、设置变量等
在SpringAOP中理解为 方法的执行
-
切入点:匹配连接点的式子
在SpringAOP中,一个切入点可以指描述一个具体方法,也可以匹配多个方法
-
通知:在切点去执行的操作,也就是共性功能
在SpringAOP中,功能最终以方法的形式呈现
-
通知类:定义通知的类
-
切面(Aspect):描述通知与切入点的关系
-
AOP入门案例
- 思路分析
- 导入坐标/包 (aspect的包)
- 制作连接点方法(原始操作,Dao接口与实现类)
- 制作共性功能(通知类和通知)
- 定义切入点 (@Pointcut和pt()方法)
- 绑定切入点与通知关系,并指定通知添加到原始连接点的具体执行位置(@Before("pt()"))
- 定义通知类受Spring容器类管理,并定义当前类为切面类(@Componet和@Aspect)
- 通知与切入点与绑定关系
- 现在SpringConfig中添加注解@EnableAspectJAutoProxy,实现Aspect包的注解