spring学习笔记
2022-06-17 13:14:32 0 举报
AI智能生成
spring学习笔记
作者其他创作
大纲/内容
SpringMVC
理解
MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码。
springmvc工作原理
1、客户端发送请求到前端控制器DispatcherServlet
2、DispatcherServlet根据请求信息寻找映射处理器HandlerMapping,找到处理请求的Controller
3、找到handler后会有HandlerAdapter处理器适配器处理
4、HandlerAdapter调用controller来处理请求
5、请求处理后回返回一个ModelAndView对象
6、视图解析去ViewResolver根据view找到实际的视图view
7、DispatcherServlet将Model传给view进行视图渲染
8、最终把view返回浏览器
事务管理
事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操
作都失败
ACID特性
原子性:事务是不可分割的最小单元,要么所有操作都做,要么所有操作都不做
一致性:在事务开始之前和事务结束以后,数据库所处的状态和它的业务规则是一致的,数据库的完整性没有被破坏
隔离性:在并发数据库操作时,不同的事务拥有各自的数据空间,它们的操作不会对对方产生干扰
持久性:一旦事务提交成功后,事务中所有的数据操作都必须被持久化到数据库中
隔离级别
uncommitted:
committed
repeatableread
serializable:逐个执行
spring中事务传播行为
propagation_required
propagation_supports
propagation_mandatory
propagation_requires_new
propagation_not_supported
propagation_never
propagation_nested
声明式(基于SpringAOP实现)
XML式
1.定义数据源
2.定义事务管理器
3.定义事务增强
4.使用AOP对切面进行事务增强
注解式
1.定义数据源
2.定义事务管理器
3.开启事务注解驱动
4.在类或方法上使用@Transaction注解
@Transactional
作用范围
类上
改类下的public方法生效
方法上
public方法生效
AOP
能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性
术语
连接点:一些可以被增强的方法
切入点:实际被增强的方法
通知:增强逻辑
前置通知
后置
环绕
异常
最终
切面:是吧通知应用到切入点的动作
原理:基于动态代理proxy
jdk Proxy:代理的对象实现了某个接口
cglib:没有实现接口的代理对象
比较
JDK动态代理性能低于CGLib代理
JDK动态代理创建代理对象时比CGLib代理快
如果对象使用的是singleton模式,则建议使用CGLib
Aspectj
在代理对象上@AspectJ启用
切点表达式:@Pointcut(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
方法切点函数
execution()
@annotation()
方法入参切点函数
args()
@args()
目标类切点函数
within()
@within()
target()
@target()
代理类切点函数
this()
常用注解
@Aspect:定义某个类为切面
@Before:前置增强
@AfterReturning:后置增强
@Around:环绕增强
@AfterThrowing:异常抛出增强
@After:Final增强,不管是抛出异常还是正常退出,都会执行增强,一般用于释放资源
@DeclareParents:引介增强
什么是spring
1. Spring是一个开源的轻量级的Java开发框架,用来简化编程
2.它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发
3.核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块
springcore:基础模块,ioc依赖注入功能
Spring AOP :提供了面向切面的编程实现
Spring JDBC : Java数据库连接
Spring Aspects : 该模块为与AspectJ的集成提供支持
Spring JMS :Java消息服务
Spring ORM : 用于支持Hibernate等ORM工具
Spring Web : 为创建Web应用程序提供支持
Spring Test : 提供了对 JUnit 和 TestNG 测试的支持
spring bean
Bean 代指的就是那些被 IoC 容器所管理的对象
类声明为 Bean 的注解
@component
@repository
@service
@controller
@component与@bean的区别
c作用于类上,b作用于方法上
c通过类路径扫描自动装配到spring中
b在方法中定义一个bean,并告诉spring
b比c自定义性强,许多地方直能是有@bean,比如第三方库中的类
注入bean的方式注解
spring:@auteowired
jdk:@resource @inject
@autowired与@resource的
@Autowired 是 Spring 提供的注解,@Resource 是 JDK 提供的注解
Autowired 默认的注入方式为byType(根据类型进行匹配),@Resource默认注入方式为 byName(根据名称进行匹配)。
当一个接口存在多个实现类的情况下,@Autowired 和@Resource都需要通过名称才能正确匹配到对应的 Bean。Autowired 可以通过 @Qualifier 注解来显示指定名称,@Resource可以通过 name 属性来显示指定名称。
bean的作用域
singleton
唯一 bean 实例,Spring 中的 bean 默认都是单例的
prototype
每次请求都会创建一个新的 bean 实例
request
每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效
session
每一次来自新 session 的 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。
global-session
全局 session 作用域,仅仅在基于 portlet 的 web 应用中才有意义
bean的生命周期
通过构造器创建bean实例
set方法为bean设置属性和其他bean的调用
把bean实例传给bean的后置处理器beanPostProcessor对象的postProcesserBeforeInitialization()方法
调用bean的初始化方法
把bean实例传给bean的后置处理器beanPostProcessor对象的postProcesserAfterInitialization()方法
bean对象可以使用
bean的destory方法
IOC
控制反转
将原本在程序中手动创建对象的控制权,交由Spring框架来管理,IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象,IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的
目的:降低耦合
DI:依赖注入
让调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以移除调用类对某一接口实现类的依赖
注入方式
构造函数注入
属性注入
接口注入(同属性注入,Spring不支持)
实现原理
1,在xml配置文件配置创建的对象,2创建工厂类,3在工厂类中xml解析和反射创建对象
使用Java反射技术
反射相关类
ClassLoader
Class
Constructor
Method
Field
xml解析
工厂模式
收藏
0 条评论
下一页