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