Spring 学习笔记
2024-07-15 11:38:49 635 举报
AI智能生成
Spring 学习笔记
作者其他创作
大纲/内容
1.方便解耦,简化开发
2.AOP编程的支持
3.声明式事务的支持
4.方便程序测试
5.方便集成各种优秀框架
6.降低JavaEE API的使用难度
优点
BeanFactory
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
AnnotationConfigApplicationContext
ApplicationContext
XmlWebApplicationContext
AnnotationConfigWebApplicationContext
WebApplicationContextUtils
WebApplicationContext
核心接口
ContextLoaderListener
DispatherServlet
Web加载方式
让调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以移除调用类对某一接口实现类的依赖
依赖注入
构造函数注入
属性注入
工厂方法注入
接口注入(同属性注入,Spring不支持)
注入方式
使用Java反射技术
ClassLoader
Class
Constructor
Method
Field
反射相关类
装载:查找和导入Class文件
检验
准备
解析
链接
初始化:对类的静态变量、静态代码块执行初始化工作
工作机制
ClassLoader(根装载器):装载JRE目录下的核心类库
ExtClassLoader(扩展类装载器):装载JRE扩展目录ext的JAR类包
AppClassLoader(系统类装载器):装载Classpath路径下的类包
类装载器
实现原理
ByteArrayResource
ClassPathResource
FileSystemResource
InputStreamResource
ServletContextResource
UrlResource
Resource
EncodedResource
从类路径中加载,与classpath:/等价
classpath:
扫描所有类路径下的jar并加载资源
classpath*:
file:
http://
ftp://
没有前缀
资源地址表达式
资源访问
singleton
prototype
request(Web环境特有)
session(Web环境特有)
global session(Web环境特有)
Bean作用域
BeanFactory中的周期
ApplicationContext中的周期
BeanFactory通过手工调用 addBeanPostProcessor 方法注册处理器
ApplicationContext利用Java反射机制自动注册 BeanPostProcessor、InstantiationAwareBeanPostProcessor、BeanFactoryPostProcessor 到应用上下文中
不同之处
Bean生命周期
变量的前两个字母要么全部大写,要么全部小写
JavaBean属性的特殊命名规范
Spring IOC
面向切面编程
性能监测
访问控制
事务管理
日志记录
一般只适应于具有横切逻辑的业务上
连接点(Joinpoint)
切点(Pointcut)
增强(Advice)
目标对象(Target)
引介(Introduction)
编译期织入
类装载期织入
动态代理织入
注:Spring采用动态代理织入,而AspectJ采用编译期织入
织入(Weaving)
代理(Proxy)
切面(Aspect)
AOP术语
只提供接口代理
Proxy
InvocationHandler
主要类
基于JDK的动态代理
提供类代理
基于CGLib的动态代理
JDK动态代理性能低于CGLib代理
JDK动态代理创建代理对象时比CGLib代理快
如果对象使用的是singleton模式,则建议使用CGLib
比较
动态代理
前置增强(MethodBeforeAdvice):在目标方法前实施增强
后置增强(AfterReturningAdvice):在目标方法执行后实施增强
环绕增强(MethodInterceptor):在目标方法执行前后实施增强
异常抛出增强(ThrowsAdvice):在目标方法抛出异常后实施增强
引介增强(IntroductionInterceptor):在目标类中添加一些新的方法和属性
增强类型
启用@AspectJ
@Aspect:定义某个类为切面
@Before:前置增强
@AfterReturning:后置增强
@Around:环绕增强
@AfterThrowing:异常抛出增强
@After:Final增强,不管是抛出异常还是正常退出,都会执行增强,一般用于释放资源
@DeclareParents:引介增强
常用注解
execution()
@annotation()
方法切点函数
args()
@args()
方法入参切点函数
within()
@within()
target()
@target()
目标类切点函数
this()
代理类切点函数
切点表达式
注解版
XML版
示例
AspectJ
优先使用@AspectJ注解方式
不同实现方式对比
Spring AOP
原子性(Atomic):表示组成一个事务的多个数据库操作是一个不可分割的原子单元
一致性(Consistency):事务操作成功后,数据库所处的状态和它的业务规则是一致的,即数据不会被破坏
隔离性(Isolation):在并发数据库操作时,不同的事务拥有各自的数据空间,它们的操作不会对对方产生干扰
持久性(Durability):一旦事务提交成功后,事务中所有的数据操作都必须被持久化到数据库中
数据库事务特性(ACID)
脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上操作,如果恰巧B事务回滚,那么A事务读取到的数据根本是不被承认的
不可重复读:A事务读取了B事务已经提交的更改数据
幻象读:A事务读取B事务提交的新增数据,幻想读一般发生在计算统计数据的事务中
第一类丢失更新:A事务撤销时,把已经提交的B事务的更新数据覆盖了
第二类丢失更新:A事务覆盖B事务已经提交的数据,造成B事务所做操作丢失
数据库并发问题
解决数据库并发问题
行共享锁定
行独占锁定
表共享锁定
表共享独占
表独占
锁分类
数据库锁机制
read_uncommited(最高并发性和吞吐量)
read_commited
repeatable_read
serializable(最低并发性)
事务隔离级别
propagation_required
propagation_supports
propagation_mandatory
propagation_requires_new
propagation_not_supported
propagation_never
propagation_nested
事务传播行为
当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程 分配一个独立的变量副本。所以每个线程都可以独立地改变自己的副本,而不会影响其他线程 所对应的副本
Thread同步仅提供一份变量,让不同的线程排队访问
ThreadLocal为每个线程都提供了一份变量,可以同时访问而互不影响
与Thread同步机制比较
ThreadLocal
TransactionTemplate
编程式
1.定义数据源
2.定义事务管理器
3.定义事务增强
4.使用AOP对切面进行事务增强
XML式
3.开启事务注解驱动
4.在类或方法上使用@Transaction注解
注解式
声明式(基于SpringAOP实现)
不能被SpringAOP实施事务增强的方法
Spring 事务管理
Cache
CacheManager
CacheManager的实现
@Cacheable
@CachePut
@CacheEvict
@Caching
缓存注解
@EnableCaching
开启缓存
Spring 缓存
核心:DispatcherServlet
框架模型
请求处理流程
DispatcherServlet内部逻辑
实现接口:HandlerInterceptor
继承类:HandlerInterceptorAdapter
配置
拦截器
视图解析器
DefaultHandlerExceptionResolver:将SpringMVC框架的异常转换为相应的响应状态码
AnnotationMethodHandlerExceptionResolver:通过@ExceptionHandler注解指定处理特定异常的方法
SimpleMappingExceptionResolver:将异常类名映射为视图名,即发生异常时使用对应的视图报告异常
异常处理
@Controller
@RestController
@RequestMapping
@GetMapping @PostMapping @DeleteMapping @PutMapping (4.3版新增)
@RequestBody
@ResponseBody
@RequestParam
@PathVariable
@RequestHeader
@CookieVaule
无参方法
使用HttpServletRequest、HttpServletResponse、HttpSession作为入参
使用InputStream、OutputStream、Reader、Writer作为入参
使用MultipartFile作为入参直接绑定上传的文件
SpringMVC控制器特性
返回值:DeferredResult
返回值:WebAsyncTask
返回值:Callable
SpirngMVC异步控制器
Spring MVC
Job
JobDetail
SimpleTrigger
CronTrigger
Trigger
Calendar
Scheduler
ThreadPool
Quartz基础结构
SyncTaskExecutor
SimpleAsyncTaskExecutor
ConcurrentTaskExecutor
SimpleThreadPoolTaskExecutor
ThreadPoolTaskExecutor
TimerTaskExecutor
Spring对Executor的抽象
Spring 任务调度
Spring学习笔记
0 条评论
回复 删除
下一页