标签:开发 需要 开始 思想 set 产生 访问 提交 知识点
在面试中,经常会问到spring相关的问题,bean的作用域及生命周期,AOP,IOC等一系列问题,平常开发可能经常用到,今天,总结了一下spring的主要知识点及面试经常遇到的问题。
spring是轻量级的应用框架,方便我们的开发,可以方便的集成其他框架,方便拓展,事物管理更加的方便,方便解耦。里面主要包含了IOC和AOP,IOC主要用来管理bean,未用spring框架时,需要使用对象的时候,需要手动去new,有了spring框架之后,交给IOC容器管理。AOP主要是面向切面编程,比如开发中需要经常记录日志,很多方法中都需要去写,这样与业务代码冗余到一起,不方便开发,使用AOP面向切面编程,就是将公共的方法提取出来,减少代码冗余。
spring中主要包含了以下六个模块:
spring core:核心类库,提供IOC服务;
spring aop:AOP服务,面向切面编程;
spring context:提供框架式的bean访问方式,以及企业功能(JNDI,定时任务等);
spring dao:对JDBC的抽象,简化了数据访问异常的处理;
spring orm:对现有orm框架的支持;
spring web:提供了基本的面向web的综合特性;
spring mvc:提供面向对象web应用的model-view-controller实现
(1)spring属于低侵入式设计,代码的污染极低;
(2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;
(3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。
(4)spring对于主流的应用框架提供了集成支持。
spring中bean的作用域有五种:分别是singleton、prototype、request、session、global-session。
singleton:默认是单例的,只有一个bean实例,通过scope属性设置其他作用域;
prototype:多例的,每次容器调用都会产生一个新的bean实例;
request:每一次http请求都会产生一个bean实例;
session:每个session中,都会有一个bean实例;
global-session:全局的http session。
谈到了bean的生命周期,先来说下servlet的生命周期,servlet实例化 - 初始化init - 接口调用处理service - 销毁destory。
实例化bean - 设置对象属性 - 处理Aware接口 - 创建成功调用 - 销毁destory。
1)setter方法注入;
2)构造器注入;
3)注解注入。
spring中的bean默认是单例的,默认的是单例的bean,spring中对bean线程安全没有做特殊的处理,所以说,spring中不能保证bean是线程安全的。
spring中的AOP即面向切面变成,面向切面编程是一种思想,即我们平常在开发中,比如记录日志,事物管理等,可能在很多地方都要使用,比如在A方法中记录日志,写了几行代码,可能B方法中,也要使用,这样就造成了代码冗余,重复代码太多,面向切面编程的思想,就是将这些方法提取出来,这样使用起来很方便,在需要的使用该方法的地方即可方便实现,如果有问题,也方便改。不至于每次出错改很多地方,提高了代码的复用性。
IOC,就是我们经常所说的控制反转,DI,就是依赖注入,这两个是对同一个事物从不同角度的解释。没有使用spring框架的时候,我们需要使用一个对象,经常需要自己去手动new,需要自己取管理对象。使用spring的IOC容器之后,对象交给spring的IOC容器管理,bean的创建,初始化,结束,依赖注入等一系列,全部由IOC容器帮我们完成,我们在需要使用的时候,直接调用就行了。
(1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
(2)单例模式:Bean默认为单例模式。
(3)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现--ApplicationListener。
spring支持编程式事务管理和声明式事务管理两种方式:
①编程式事务管理使用TransactionTemplate。
②声明式事务管理建立在AOP之上的。其本质是通过AOP功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
声明式事务最大的优点就是不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明或通过@Transactional注解的方式,便可以将事务规则应用到业务逻辑中。
声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式,使业务代码不受污染,只要加上注解就可以获得完全的事务支持。唯一不足地方是,最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。
知识就是要不断的学习,不断的复习,这样的才能记忆的更加深刻。加油,美好的风景一直在路上。
手写不易,觉得文章不错可以关注公众号「 凌晨四点的程序员 」和我一起学习
关注公众号回复“spring”领取spring源码详细讲解视频一份
扫码关注:
标签:开发 需要 开始 思想 set 产生 访问 提交 知识点
原文地址:https://www.cnblogs.com/liaozuheng/p/13062763.html