spring相关知识整理

一.spring ioc容器

容器的功能:加载配置文件中定义的bean,将所有bean 集中在一起(存在一个hashMap中),当有需求的时候分配bean(通过bean的去map 中get(key))。

1.BeanFactory容器(最简单)

1)适用于轻量级的应用程序,如移动设备或基于applet的应用程序。

基于applet的应用程序:用户在这种页面访问时,applet下载到用户的计算机执行(前提:浏览器支持 java)。

    好处是,不受网络带宽或存取速度的限制。

2.ApplicationContext容器

1)包含BeanFactory的所有功能,但超过BeanFactory。

2)添加许多企业特定的功能。

Yjsy应该是用的ApplicationContext容器

常用的applicationcontext 实现:

FileSystemXmlApplicationContext

ClassPathXmlApplicationContext

WebXmlApplicationContext

3)Bean 5种作用域

3.1singleton(单例):仅存在一个bean实例:service

3.2Prototype:每次调用(getBean())返回一个新的实例,相当于new object()

3.3request:每次http请求创建一个新 bean,仅用于webApplicationContext

3.4session: 同一个http session共享一个Bean,不同的session使用不同的bean,仅用于webApplicationContext

3.5global-session:用于portlet环境中

二.spring aop 

spring aop:面向切面编程,通常使用在核心关注点,比如权限,日志,事务。主要作用是,需要关注的是对哪种方法进行拦截,拦截之后怎么处理,关注点称为横切关注点。

参考博文:https://www.cnblogs.com/hongwz/p/5764917.html

步骤:1.定义普通业务组件

2.定义切入点(切入点可以横切多个业务组件)

3.定义增强处理(在aop框架为普通业务组件的处理动作)

三 .spring ioc控制反转

在系统运行中,动态的像某个对象提供他所需要的其他对象,在没有使用spring的时候,由开发者手动创建,创建合作的对象的主动权和创建时机由开发者自己掌握,这样会使对象之间的耦合度更高。但使用了spring之后,创建对象的工作由spring来完成,spring创建好需要的其他对象B,存储到一个容器里,当A对象需要使用B对象时,spring从存放对象的容器中取出A需要的B对象,交给A使用。

控制反转就是说,将以往开发者创建对象的主动权和创建时机交给spring,依赖注入是ioc 的另外一种说法。

参考博文:https://www.cnblogs.com/xdp-gacl/p/4249939.html

四.spring中的单例多例

首先理解什么是单例多例?

单例:对象在整个系统中只有一份,每次请求都用同一个对象来处理,例如controller和service一般是单例。为什么使用单例?因为没必要每次请求都创建一个对象,浪费cpu和内存。多例:防止并发问题,一个请求改变了对象的状态,对象又处理另外一个请求,而之前对对象的请求状态导致了对象对另外一个请求做了错误的处理。

单例模式共享普通成员变量和静态成员变量,多例下普通成员成员变量不共享,静态成员变量共享。springmvc中,controller优先使用单例。

参考博文:https://blog.csdn.net/weiha666/article/details/78670644

为什么controller是单例的,spring还能实现线程安全?spring使用了ThreadLocal(线程隔离,用空间换时间的手段,为每个线程提供变量的独立副本,确保线程安全),在高并发的场景下,使用 threadLocal可以在一定程度上减少锁竞争。

五.spring boot与spring  mvc的区别

基于spring的工厂模式和代理模式(aop)解耦应用组件,于是根据这种模式开发了spring mvc框架,用于开发web应用。在实际的开发过程中,每次写很多样板代码,为了简化工作流程,开发了懒人starter,这就是spring boot.spring boot 降低了项目搭建的复杂度,实现了自动配置

猜你喜欢

转载自blog.csdn.net/qq_33653393/article/details/83541001