Spring是什么?
spring是一个轻量级的AOP和IOC的轻量级框架。是为Java应用程序提供基础性服务的一道框架,目的是简化企业级应用开服。使得它只需关注业务需求即可。
Spring的组成 core, beans, context, Aspects, Aop,Transactions,jdbc, ORM, OXM 等等。
spring的优点。
1 轻量:spring是轻量级的,基本的版本大约2MB。
2 控制反转:Spring通过控制反转实现了松散耦合,对象们给出他们的依赖,而不是创建或查询依赖的对象们。
3 事物管理:Spring提供一个持续的事物管理接口,可以扩展本地事物和全局事物。
4 异常处理:Spring提供异常处理。
5 提供MVC框架:Spring的web框架是个精心设计的框架。
Aop。
它一般称为面向切面,作为面向对象的一种补充。用于将那些于业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取出来封装成可以复用的模块。这样就可以减少重复代码,同时也提高系统的可维护性。
什么是控制反转和依赖注入?
依赖注入:应用程序容器创建并注入它所需要的外部资源。
控制反转:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
依赖注入:1)构造器注入
2)setter注入
3)接口注入
BeanFactory和ApplicationContext有什么区别?
BeanFactory是Spring是最底层的接口,包含各种Beans的定义,读取Bean配置文档,管理beand的加载,实例化,控制Bean的生命周期,维护Beans之间的依赖关系。
ApplicationContext作为BeanFactory的子接口,既有BeanFactory的共功能又有您的功能。
1)统一了资源的访问方式。
2)可以同时加载多个配置文档。
3)提供在监听器中注册的bean事件。
4)继承MessAgeSource因些支持国际化。
但对于BeanFactory采用的是延迟加载注入bean的,即只有使用到某个Bean时,才对该Bean进行加载实例化。ApplicationContext则是容器启动时,一次性创建所有的Bean
Spring支持几种Bean的作用域?
1)singletion 默认只有一个bean实例化。
2)prototype 为每一个bean实例化,
3)request 每一个网络请求创建一个实例。
4)session 每一个session就有一个实例。
5) global-session 全局作用。
Spring基于XMl注入bean的几种方式。
1)set方法注入
2)构造器注入
3)静态工厂注入
4)实例工厂
Spring的自动装配。
1)no
2)byname
3)bytype
4)constructor 利用构造函数进行装配
5)autodelect 自动探测,如果construct的方法自动装配,否则使用bytyped的方式自动装配。
Spring框架都用到那些设计模式?
1)工厂模式:BeanFactory就是简单工厂模式的体现。
2)单例模式:Bean默认单例模式。
3)模板模式:解决代码重复问题,如JDBC的模板。
4)代理模式:Spring的代理模式。
5)观察者模式:
Spring的通知有哪些类型。
1)前置通知:在某连接点之前执行的通知。
2)后置通知:在某连接点之后执行的通知。
3)抛出异常通知:方法抛出异常推出时执行的通知。
4)后通知:当某连接点退出的时候执行的通知。
5) 环绕通知:包围一个连接点的通知,如方法调用,这是一个强大的一种通知类型,它也是选择是否继续执行连接点或直接返回他们的返回值或抛出异常来结束执行。
Spring种AOP里面的几个名词。
1)切面:被抽取的公共模块,可能会横切多个对象。
2)连接点:指方法,SpringAOP中,一个连接点代表一个方法的执行。
3)通知:在切面的某个特点的连接点上执行的动作。
4)切入点:切入点是指我们们要对哪些连接点进行拦截的定义。
5)引入:声明额外的方法或者某个类型的字段。
6)目标对象:被一个或者多个切面所通知的对象。
7)织入:把增强应用到目标对象来创建新的代理的过程,Spring在运行时完成织入。
Spring的事务如何实现的?
Spring事务分为 1)编程式的事务
2)声明式的事务 1)基于事务代理工厂的事务声明式。
2)基于事务注解声明式事务管理。
3)基于ASpectj Aop配置事务。
事务的隔离级别。
1)read uncommited(读未提交)隔离级别最低,另一个事务可以读取这个事务未提交的数据。
2)read commited(读提交) 保证一个事务提交后才能被另一个事务读取。
3)repeatable(可重复读) 这个是隔离防止脏读,不可重复读,不能出现幻读。
4)serializable 事务隔离级别最高花费代价最高但可靠,可以防止脏读,幻读,不可重复读。
脏读:数据还未提交就被一个事务读取。
不可重复读:其一个事务进行一次读取数据,再次读取数据时就读到其他事务修改过的数据,导致俩次读取数据不匹配。
幻读:一个事务先后读取一个范围的数据,但是俩次读取的数据不一致(会新增一条数据)
注:不可重复读重点在 update和delete
幻读:insert
Spring的多线程实现?
Spring是通过TaskExecutor任务执行器来实现多线程和并发编程的,使用ThreadPoolTaskExecutor可实现一个基于线程池TaskExecutor。一般在开发是非阻塞的,即异步的,所有我们在配置类通过EnableAsync开启异步的支持,并通过在实现执行的Bean方法中使用@async注解@async注解来声明其是一个异步任务。