Spring

  • 1.Spring的优点以及由哪些模块组成?
  • 2.BeanFactory和ApplicationContext的区别?
  • 3.BeanFactory和FactoryBean的区别?
  • 4.Bean的生命周期?以BeanFactory容器为例
  • 5.IOC和DI的理解?
  • 6.Spring AOP的理解?
  • 6.1Spring AOP和AspectJ AOP的区别?
  • 6.2Spring AOP中的常用名词?
  • 7.Spring事务
  • 7.1Spring支持事务管理的类型?
  • 7.2Spring事务的隔离级别?
  • 7.3Spring事务失效的问题?
  • 7.4Spring事务传播行为?
  • 8.Spring MVC的工作原理?
  • 9.Spring如何保证Controller的并发安全?
  • 10.Spring用到哪些设计模式?


1.Spring的优点以及由哪些模块组成?

Spring是一个简化开发的框架。
优点:
1.解耦,没有Spring之前对象之间的依赖关系需要对象来建立,这样代码之间的耦合度很高,Spring容器来管理对象后降低耦合度。
2.提供AOP编程,在一些日志、事务、拦截处理方面比较优秀。
3.集成其它框架,比方说ORM框架Mybatis、定时任务的框架Quartz等。
模块:
1.Spring Core:Spring的核心容器,有最主要的组件BeanFactory,使用工厂模式来创建对象。
2.Spring AOP:采用面向切面编程的思想。
3.Spring ORM:提供了对ORM框架的支持。
4.Spring DAO:提供对数据库访问的支持。
5.Spring WEB:对WEB开发的支持。
6.Spring Context:核心容器的扩展,提供更多的服务。
7.Spring WEB MVC:Spring MVC。

2.BeanFactory和ApplicationContext的区别?

1.BeanFactory是Spring Core中的,ApplicationContext是Spring Context中的,ApplicationContext是BeanFactory的
子接口,都能实例化容器,ApplicationContext是对BeanFactory功能增强。
2.BeanFactory实现的容器中,配置的Bean会在第一次使用时实例化,但是ApplicationContext实现的容器后,所有配
置的Bean会马上实例化。

3.BeanFactory和FactoryBean的区别?

BeanFactory是Bean的工厂,可以实现Spring容器,对Bean进行管理,FactoryBean是Spring中的一个特殊的Bean,
可以实现FactoryBean接口来实例化Bean。

4.Bean的生命周期?以BeanFactory容器为例

实例话、属性赋值、初始化、销毁四个主要步骤。
(后面补充)

5.IOC和DI的理解?

IOC:控制反转,原来对象之间的依赖关系由对象建立,然后Java代码全部耦合在一起,现在全部交给Spring容器来
管理。IOC容器可以由BeanFactory来实例化,也可以用ApplicationContext来实例化,平时用ClassPathXmlApplic
ationContext和AnnocationConfigApplicatoinContext来获取。
DI:依赖注入,是实现控制反转的一种实现方式。分为接口注入,setter方法注入和构造器注入。

6.Spring AOP的理解?

将某块代码切入到指定的位置运行的编程方式;可以用在日志处理、事务等方面;重复利用代码,降低模块间的耦合度;
底层使用的是代理模式。

6.1Spring AOP和AspectJ AOP的区别?

1.Spring AOP是动态代理,AspectJ AOP是静态代理;
2.Spring AOP是运行时的增强,AspectJ AOP是编译时的增强;

6.2Spring AOP中的常用名词?

1.切面(Aspect):用注解@Aspect;
2.通知(Advice):前置通知,后置通知,返回通知,异常通知,环绕通知;
3.切入点(PointCut):在哪些地方加通知,一般是个正则表达式;
4.连接点(Join point):可以通过连接点获取类、方法等的一些信息;
5.目标对象(Target Object):被通知对象;

7.Spring事务

Spring的事务其实就是数据库事务的支持。
数据库事务ACID
1.原子性(atomicity):一个事务中的所有操作要么全部完成要么全部不完成,是不可分割的。
2.一致性(consistency):事务中的数据前后一致的。
3.隔离性(isolatiokn):防止多个事务并发执行时导致数据的不一致。
4.持久性(durability):不会因系统的故障导致数据的丢失。

7.1Spring支持事务管理的类型?

1.编程式事务管理,手动在代码中添加事务;
2.声明式事务管理,业务代码和事务分离,在注解或者xml中声明就行;

7.2Spring事务的隔离级别?

ISOLATION_DEFAULT:用数据库的设置隔离级别,数据库设置的是什么我就用什么;

ISOLATION_READ_UNCOMMITTED:读未提交,最低隔离级别、事务未提交前,就可被其他事务读取
(会出现脏读、不可重复读、幻读);

ISOLATION_READ_COMMITTED:读已提交,一个事务提交后才能被其他事务读取到(会出现不可重复读、幻读),
Oracle 默认级别;

ISOLATION_REPEATABLE_READ:可重复读,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,
禁止读取到别的事务未提交的数据(会出现幻读),MySQL 的默认级别;

ISOLATION_SERIALIZABLE:序列化,代价最高最可靠的隔离级别,(该隔离级别能防止脏读、不可重复读、幻读)
多个事务串行。

脏读 :表示一个事务能够读取另一个事务中还未提交的数据。比如,某个事务尝试插入记录 A,此时该事务还未提交,然后另一个事务尝试读取到了记录 A。

不可重复读 :是指在一个事务内,多次同一数据返回的结果不同,后续的读取可能被另一事务修改。

幻读 :指同一个事务内多次查询返回的结果集不一样。比如同一个事务 A 第一次查询时候有 n 条记录,但是第二次同等条件下查询却有 n+1 条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。

7.3Spring事务失效的问题?

1.方法不是用public修饰;
2.非事务方法调用事务方法;可以将非事务方法加@Transactional,前提是事务的传波行为默认的REQUIRED;
3.异常自己捕获处理了;rollbackFor失效了;

7.4Spring事务传播行为?

当多个事务同时存在的时候Spring如何处理这些行为。

① PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
Spring默认;

② PROPAGATION_SUPPORTS:如果当前没有事务,就以非事务运行,如果当前存在事务,就加入该事务。

③ PROPAGATION_MANDATORY:如果当前没有事务,就抛出异常,如果当前存在事务,就加入该事务。

④ PROPAGATION_REQUIRES_NEW:无论当前存不存在事务,都创建新事务。

⑤ PROPAGATION_NOT_SUPPORTED:如果当前存在事务,就把当前事务挂起。

⑥ PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

⑦ PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行。

8.Spring MVC的工作原理?

spring 时间对比 springtime spring区别_数据


1.请求到达DispatcherServlet(中央调度器),分发给HandlerMapping(处理器映射器),返回给DispatcherServlet

一个执行器链;

2.DispatcherServlet将执行器链分发给HandleAdaptor(处理器适配器),然后处理器(Controller)执行,返回给

DispatcherServlet一个ModelAndView;

3.DispatcherServlet将ModelAndView发给ViewResolver(视图解析器),返回给DispatcherServlet视图;

4.view通过视图处理返回给前端。

9.Spring如何保证Controller的并发安全?

Spring中的Bean默认时单实例的,是存在线程安全的问题的。
有两种处理方式:一般会采用ThreadLocal关键字来修饰类变量;或者在Controller的作用域设置成Prototype;

10.Spring用到哪些设计模式?

1.工厂模式 BeanFactory。
2.代理模式 AOP 事务等。
3.单例模式,默认Bean都是单例的。