spring系列

0.过滤器和拦截器

过滤前-拦截前-action执行-拦截后-过滤后

1.过滤器(Filter)数据处理
    初始化init【web启动就初始化】
    链doFiltier才能继续执行
    销毁【web关闭时】
2.拦截器(类似与servlet相似)(aop思想)springmvc
    继承HandlerInterInterceptor

    preHandle true放行 处理前
    postHandle处理后 日志
    afterCompetion清除

1.springmvc的步骤

1.客户端请求到前端控制器(dispatcherServlet)
2.前端控制器请求处理映射器(handlemapping)查询url返回要handle处理对象
3.前端控制器在同处理适配器(handleadapter)执行handle处理器返回 modelandview
4.在通过视图解析器返回视图结果给客户端
5.浏览器渲染页面


//1.请求dispatcherServlet执行doService方法
//2.doService方法中执行doDispatch方法
//3.遍历handlemappings通过request对象返回一个人执行链HandlerExecutionChain
//4.执行链去获得一个HandlerAdapter适配器
//5.handleadapter执行handle处理器返回 modelandview
//6.视图解析器解析modelandview返回视图结果给客户端将数据存放在request对象作用域下

DispatchServlet doService(request, response)
  
	doDispatch(request, response){
		HandlerExecutionChain mappedHandler = getHandler(processedRequest){
			for (HandlerMapping mapping : this.handlerMappings) {
					HandlerExecutionChain handler = mapping.getHandler(request);
					if (handler != null) {
						return handler;
					}
				}
		}

		HandlerAdapter ha = getHandlerAdapter(HandlerExecutionChain.getHandler());
		ModelAndView mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

		processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException){
			render(mv, request, response){
				InternalResourceView.exposeModelAsRequestAttributes(model, request){
					request.setAttribute(name, value);
				}
			}
		}

	}


2.spring框架

1.核心思想:IOC(控制反转)、AOP(面向切面编程)

IOC:将创建类的权利通过程序员托管给spring容器管理,同时容器会将你所依赖的类都创建并且注入,依赖注入(工厂模式加反射机制。)
AOP:面向切面编程:将非必须业务的提取出来专注完成,在到需要的时候将业务横向切入到对应的位置。实现原理动态代理

2.静态代理和动态代理
静态代理,就是在类创建一个代理类,这样就不用直接去访问具体类,直接访问操作代理类来进行操作
缺点每一个真实对象都需要有个代理对象

动态代理(jdk动态代理/cglib继承)
proxy 生成代理类
invocationhandler   in vr ka tion hand l 处理真实对象返回结果

1. 若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。 
优点:因为有接口,所以使系统更加松耦合 
缺点:为每一个目标类创建接口

2. 若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。 
优点:因为代理类与目标类是继承关系,所以不需要有接口的存在。 
缺点:因为没有使用接口,所以系统的耦合性没有使用JDK的动态代理好。


spring
1.IOC底层原理
	基于容器完成的,底层就是一个对象工厂
2.IOC核心接口BeanFactory和ApplicationContext
	BeanFactory加载配置文件不会创建里面的对象,使用的时候才会才会创建对象
	ApplicationContext加载配置文件就会创建里面的对象,web在启动时候就加载。
3.实现类
	FileSystemXmlApplicationContext(加载文件目录全路径下的某个文件)
	ClassPathXmlApplicationContext(加载resources路径下文件名)
4.IOC操作bean管理(两个操作)(两种方式【xml】【注解(aop)】)
	spring创建对象(默认执行无惨的构造方法)
	spring注入属性(set注入、有参构造方法)DI:依赖注入,就是注入属性
	注入属性步骤创建对象->注入属性
5.spring两种bean
	普通bean 定义和返回类型一致
	工厂bean【FactoryBean】可以定义返回bean返回类型,定义的和返回类型可以不一样
5.工厂Bean、Bean作用域、Bean生命周期
	FactoryBean接口实现方法:
		返回对象()、返回类型()、是否单例()
	Bean作用域(默认单例)
		单例【加载创建】、多例【调用创建】、request、session
	Bean生命周期(aop)
		(1)通过构成方法创建bean实例
		(2)set注入属性
		把bean实例传入后置处理器的方法postProcessBeforeInitialization
		(3)调用bean初始化的方法(需要进行配置)
		把bean实例传入后置处理器的方法postProcessAfterInitialization
		(4)bean对象获得
		(5)关闭容器,调用bean的销毁的方法(需要进行配置)
6.手动装配、自动装配
	手动装配:根据标签指定的属性或类型
	自动装配:不需要指定,spring自动将匹配的属性值进行注入
	Autowired中
		byName:名称和属性名一致
		byType:相同类型bean会报错【最好唯一】
7.注解(aop)
	引入aop
	创建对象:开始组件扫描【可以指定规则扫瞄】扫描与不扫描
	属性注入:
		@Autowired:根据属性类型自动装配
		@Qualifier:根据属性名称进行注入
		@Resource:	根据根据类型/名称注入
8.aop
	动态代理
		jdk接口代理 创建接口实现类代理对象
			1.创建接口,实现接口方法
			2.创建代理对象代码实现InvocationHandler重写invoke方法实现增强方法代码
			3.使用Proxy.newProxyInstance()使用
		cglib代理 创建与当前类子类的代理对象
9.AOP(术语)
	1.连接点:那些方法可以被增强
	2.切入点:实际被真正增强的方法
	3.通知(增强):实际增强的逻辑【日志】、【权限】
		前置:方法之前
		后置:方法之后
		环绕:方法前后都
		异常:异常执行
		最后:都会执行如finally(d动作)
	4.切面:把通知添加到切入点中
10.spring中基于Aspectj实现aop操作
	xml、注解
11.事务
	1.事务特征(ACID)
		原子性:事务最小单位不可再分
		一致性:要么全成功要么全回滚
		隔离性:两个事务直接是相互隔离的
		持久性:事务一旦提交就持久化到硬盘
	2.事务隔离性的隔离级别
		读未提交 ------------------脏的、不可重复的、幻读
		读已提交(orl)------------不可重复的(未必是错)、幻读(添加的时候)
		可重复度(mysql默认隔离级别)-
		串行化----------------------
	脏读:在一个事务中读取到另一个事务没有提交的数据 
	不可重复读:在一个事务中,两次查询的结果不一致(针对的update操作) 
	虚读(幻读):在一个事务中,两次查询的结果不一致(针对的insert操作) 
12.事务操作
	编程式事务
	声明式事务(xml、注解)
	TransactionManager接口PlatformTransactionManager
		创建一个事务管理器DatasourceTransactionManager
		注入数据源Datasource
		开启注解->添加事务注解@Transactional(类、方法)
			事务传播行为:多事务方法
				【事务方法:更新操作】
				add1,add2基于add1去描述的
				1.REQUIRED:如果有在当前事务内执行,否则创建一个新事物
				2.REQUIRES_NEW:当前有没有事务都创建事务
				3.NESTED
				4.NEVER
				5.NOT_SUPPORTED
				6.MANDATORY
				7.SUPPORTS
			隔离级别
				出现问题【脏读、不可重复读、虚读(幻读)】
			超时时间
			是否只读
			回滚
			不回滚
https://www.bilibili.com/video/BV1Vf4y127N5

 

 

3.mybatis

mybatis中#、$的区别
(1)#{} 占位符、sql预编译、防止sql注入
(2)${} 拼接符、sql拼接、不能

缓存
a.一级缓存 一次SqlSession回话结束清除缓存
b.二级缓存 同一个mapper文件都有效

请求--先在二级缓存中找--没有然后在一级缓存中找--找不到在查询数据库--请求结束后保存在二级缓存中
缓存回收策略
先进先出(FIFO)、最近做少使用的(LRU)

c.三级缓存 rides



执行步骤:
1、 创建SqlSessionFactory
2、 通过SqlSessionFactory创建SqlSession
3、 通过sqlsession执行数据库操作
4、 调用session.commit()提交事务
5、 调用session.close()关闭会话


多个参数传递
1.顺序传参法   
    #{0}、#{1}
2.@Param注解传参法
3.Map传参法
4.java bean传参法

mybatis如何批量操作
foreach标签
    item 表示集合中每一个元素进行迭代时的别名,随便起的变量名;
    open 表示该语句以什么开始
    close 表示以什么结束
    separator 循环之间以什么符号作为分隔符 
    collection 表示传集合
        1.如果传入单参数且参数类型是一个List的时候,collection属性值为list
        2.如果传入单参数且参数类型是一个array数组的时候,collection属性值为array
        3.如果传入是多参数封装成map,collection的属性值是map的key值
    

4.rpc通信、序列化

5.springboot

springboot
1.优点
	快速创建独立运行的spring项目以及与主流框架集成
	使用嵌入式的servlet容器,应用无需打成war包
	starters自动依赖与版本控制
	大量的自动配置,简化开发,也可以修改默认值
	无需配置xml,无代码生成,开箱即用
2.原理	
	1.spring-boot-starter-parent 父依赖 spring-boot-dependencies 管理所有依赖
	2.springboot将功能场景都抽取出来,做成了一个个starter(启动器)
	3.@SpringBootApplication主配置类
	@SpringBootConfiguration //springboot配置类 --@Configuration//配置类容器的一个组件
	@EnableAutoConfiguration
	@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
			@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
	@EnableAutoConfiguration //开启自动配置
	 @AutoConfigurationPackage//自动配置包     
	  @Import(AutoConfigurationPackages.Registrar.class)//spring将主配置类包下的所在包及子包扫描在

	 @Import(AutoConfigurationImportSelector.class) //自动配置导入选择器



	SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,ClassLoader);
	  META-INF/spring.factories 获取EnableAutoConfiguration值,将值导入容器中,自动配置类生效
	spring-boot-test-autoconfigure-2.3.1.RELEASE.jar 

https://niceseason.github.io/2020/04/18/springboot/

 https://note.clboy.cn/#/?id=syl%e7%9a%84%e7%ac%94%e8%ae%b0笔记

注解描述
@RequestBody注解实现接收http请求的json数据,将json转换为java对象
@ResponseBody

注解实现将conreoller方法返回对象转化为json对象响应给客户

@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)

@Resource

默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入
@PathVariableURL参数变量

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值