Spring 面试题
IOC和DI是什么?
ioc控制反转,di依赖注入。将创建对象的权力交给ioc容器,再通过依赖注入的方式,实现对象间的解耦合。
spring ioc的理解,及其初始化过程?
ioc:将类提前配置在beans.xml文件中,需要对象时,不再通过new创建,而是通过容器获取,将类的控制权交给spring容器,就是控制反转。
在获取ApplicationContext实例对象过程中会创建一个spring容器,该容器会读取配置文件beans.xml,并统一管理该文件中的bean实例对象,如果要获取实例,使用getBean()方法就可以了。
Spring bean的生命周期?
对bean进行实例化,将值和bean的引用注入到bean对应的属性中。如果bean中实现aware等接口,就调用相应的方法。直到bean准备就绪,就可以被应用程序使用,bean也将一直存在在应用上下文中,直到该应用上下文被销毁。
ApplictionContext上下文的生命周期?
创建ioc容器,读取配置文件到容器中,实例化bean,设置属性值。
BeanFactory和FactoryBean的区别?
两者都是接口,BeanFactory为ioc容器的实现提供规范,是管理bean的工厂,FactoryBean通过装饰者模式和简单工厂模式为ioc容器中bean的实现提供更加灵活的方式,是bean。
BeanFactory和ApplicationContext的区别?
BeanFactory:是spring中比较原始的Factory,只提供了实例化对象和拿对象的功能。在启动的时候不会去实例化bean,只有从容器中拿的时候才会去实例化,优点是节约内存,缺点是速度慢。
ApplicationContext:继承了BeanFactory,是spring里更高级的容器,提供了更多有用的功能。比如aop,访问资源文件。在bean启动的时候把所有bean都实例化,也可以通过配置让bean延迟实例化。优点是系统的运行速度快,尽早发现系统中的配置问题。缺点是耗内存。
Spring Aop 的实现原理?
采用jdk动态代理模式来实现aop机制。将切面使用动态代理的方式动态织入到目标对象,形成一个代理对象。目标对象如果没有实现代理接口,那么spring会采用CGlib来生成代理对象,该代理对象是目标对象的子类。目标对象如果是final,又没有实现接口,就不能运用aop。
Spring 是如何管理事务的,事务管理机制?
Spring 管理事务是通过事务管理器实现的,主要包括三个接口:
TransactionManager:事务管理器。用于对事务的回滚、提交、获取事务状态。
TransationDefinition:事务定义信息。用于定义事务相关的属性,给事务管理器使用。比如获取事务隔离级别、获取超市时间、是否只读。
TransationStatus:事务具体运行状态。事务管理过程中,每个时间点事务的状态信息。
事务管理机制包括声明式事务和编程式事务。声明式事务通过在方法上加声明注解的方法,将事务操作交给spring。编程事事务主要是通过代码按照逻辑分成单元提交。