【温故知新】-Spring相关知识点梳理

Spring相关知识点灵魂十问

目录

1.spring有哪些模块?

2.IOC底层实现原理

3.AOP底层实现原理

4.spring bean的生命周期

5.spring bean的作用域

6.spring mvc底层原理

7.spring中的设计模式

8.spring中如何控制bean的加载顺序

9.spring中@Component和@Bean 区别, @Autowired和@Resource区别

10.spring中的事务


1.spring有哪些模块?

spring的模块有:spring-core,spring-data,spring-web,spring-test,用下面这张网图来概括,更全面

 

2.IOC底层实现原理

IOC概念:IOC即控制反转,创建对象不再需要通过主动去new,而是通过中介(容器)进行获取,可以有效解耦.

IOC实现:通过读取xml或注解中读取类的全路径等配置信息,将这些信息存放到beanDefinitionMap中,然后在用到的地方通过BeanFactory从beanDefinitionMap中拿到的信息反射创建改类.具体过程比这要复杂的多,有兴趣可自行研究spring源码.

 

3.AOP底层实现原理

AOP概念:面向切面编程,java是面向对象编程,面向对象编程是横向的,但很多场景下需要纵向编程,比如某功能需要在每个类中都出现,这时候如果没有切面,就需要在每个类中重复定义方法,大量重复代码,借助切面可以对这些类集中作增强.

AOP实现:AOP底层用的是动态代理的技术,动态代理分为JDK动态代理和CGLIB动态代理,两种方式各有各的适用场景,JDK动态代理仅适用于实现了接口的代理类,不能直接针对类作代理,CGLIB不能对final修饰的类代理,Spring为了屏蔽这两种代理的适用场景,

spring自身动态代理作了封装,根据代理的对象动态判断采用jdk动态代理还是cglib动态代理

 

4.spring bean的生命周期

spring bean的生命周期可以分为四个阶段:实例化->属性赋值->初始化 ->销毁

其中核心接口有两个,InstantiationAwareBeanPostProcessorBeanPostProcessor

5.spring bean的作用域

spring bean 的作用域分为:

singleton:单例,在spring容器中仅存在一份实例

prototype:多实例,每次从容器中get时,会创建一份实例

request:每次http请求都会创建一个新的bean

session:同一个http session 共享一个bean

application:限定一个bean的作用域为servletContext的生命周期

 

6.spring mvc底层原理

spring mvc的底层是借助dispatch servlet实现的,具体可以参考下图:

dispatchServlet将请求路径转发至handlerMapping中找到对应的handler链,由handlerAdapter适配器对接具体执行的handler处理业务逻辑,然后返回modelAndView,再由viewResolver找到对应的view并进行渲染。

7.spring中的设计模式

spring中常见的设计模式有:

单例:Spring中的bean

工厂:Spring beanFactory

代理:aop的底层实现

观察者:applicationListener

适配器:mvc handlerAdaptor

 

8.spring中如何控制bean的加载顺序

可以通过@Order注解,指定数字,控制加载顺序,数值越小,优先级越高,可以为负数

 

9.spring中@Component和@Bean 区别, @Autowired和@Resource区别

@Component:只能被加在类上面,添加了该注解的类会被spring容器注册bean

@Bean:只能被添加在方法或注解上,同样也会被Spring容器注册bean

 

@Autowired:是spring提供的注解,默认是按照by type进行注入的,当然也可以指定按name注入,需要添加@Qualifier(name="xxx")注解

@Resource:是java提供的注解,是按照name进行注入的,当一个接口有多实现时,如果通过@Autowired不用@Qualifier的话就无法注入,但@Resource可以

 

10.spring中的事务

Spring事务的隔离级别与mysql的事务隔离级别一致:读未提交,读已提交,可重复读,串行化,

Spring事物的传播:PROPAGATION_REQUIRED:Spring默认的事务传播机制,如果有外层事务,则当前事务加入外层事务,与外层事物一起提交/回滚,如果没有外层事务,则新建事务执行,其它几个暂不介绍,用的很少。

Spring事务的配置支持编程式事务和声明式事务,编程式事务通过TransactionTemplate实现,声明式事务通过@Transaction注解实现,两者的区别主要编程式事务粒度更细,声明式事务只能加在类或方法上,粒度相对粗一些,但对代码无入侵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值