一、spring持久层模块介绍--------------采用了模板设计模式
1、spring的持久层模块;spring-jdbc
2、功能:也是对原生jdbc的封装,也是和数据库交互,实现CRUD功能,能实现参数传递,能实现结果映射,需要设计SQL语句,没有配置文件,在程序中写SQL
二、模板设计模式
1、设计模式注重模板的设计,所谓的模板就是把一些相同功能封装起来,便于重复使用(代码复用)
2、设计实现
1)定义接口
2)定义抽象类 ----实现接口, 把重复性的代码在类中实现
3)有其他类继承抽象类----------重写那些需要根据实际情况变化的内容
3、举例
三、aop设计思想--------spring框架中的另一个核心思想,核心概念
1、代理方式:设计的目的就是为了实现代码的灵活扩展,解决继承时从父类全继承、或者对象和对象之间出现高耦合
2、原生的代理方式
1)介绍
一方(对象)代替另一方(对象)实现功能
2)代替方-----代理对象;被代替方-----目标对象
3) 实现
A;代理有静态代理和动态代理方式
B静态代理的实现:
C、静态代理有缺点的一个代理类对应一个目标类,一个代理对象对应一个目标对象,如果有多个目标类和对象,会出现对应的多个代理类和对象,代码可能多了近乎一倍
4)动态代理
A、两种动态代理方式----jdk动态代理,cglib动态代理方式
B、jdk方式借助的就是jdk中的提供的类、接口等功能实现;cglib方式属于框架提供
C、jdk动态代理的实现方式:接口、实现类、代理工厂类
5) 动态代理和静态代理的区别
静态代理,代理对象所属的类一直存在;动态代理,代理对象所属的类动态生成的
6)cglib动态代理介绍
A、这种代理方式目标对象不需要接口,只需要类
7)动态代理同样存在缺点
如果在目标对象中有多个功能,而在实现扩展功能的时候,需要给不同的功能扩展不同的内容,那么在使用动态代理实现的时候,在invoke方法中实现可能较为复杂·
3、aop介绍.
1)spring的aop实现默认基于的是jdk动态代理
2)AOP
Aspect Oriented Programming
面向切面编程
是面向对象编程的扩展、补充、实现了松耦合,在开发过程中专注于切面的开发
切面是由切点和扩展功能组合的模块。是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种设计思想。
3)专业术语的介绍
A 、切面
是切点和增强的模块化;包含切点和增强
B 、切点
是指确定向那些方法实现添加功能的点(定义 ),如何确定要被扩展的方法呢?,通常使用函数和表达式来实现。
函数:execution
表达式:最终确定的是方法(表达式代表的是方法)
表达式有格式:精确格式、模糊格式(带有符号:* .)
模糊格式:方法返回值类型,包名、类名、方法名,形参都可以使用符号
*com.offcn.service.UserServiceImpl.login() //向login扩展功能
*com.offcn.service.UserServiceImpl.*(..)//向类中所有方法中扩展功能
*com.offcn.service.UserServiceImpl.do*(..)//向类中所有以do开头的方法扩展功能
*com.offcn.service.*.*(..)//向service包中所有的类的所有方法扩展功能
C、增强、通知
是指扩展的功能,通常被封装成方法
不同的增强方式:前通知(前增强)、后通知(后增强)、环绕通知(环绕增强)、异常后通知(异常后增强)、最终通知(最后增强)
前通知:在原有的功能执行之前先执行的通知
后通知:在原有的功能执行之后执行的通知,如果原有的功能发生异常,那么后通知无法执行
环绕通知:在原有的功能执行之前和执行之后分别都有执行,如果原有的功能发生异常,那么在原有功能执行之后的再次执行就无法执行了
异常后通知:只有在原有功能发生异常时才执行,如果原有功能没有异常则不执行
最终通知:不论原有功能是否发生异常,在原有功能执行执行都会执行