目录
六、BeanFactory和ApplicationContext的区别
一、什么是Spirng框架?
Spring框架为java提供了一个综合的基础性开发支持的平台。包含ioc 容器、数据访问、数据集成、aop、测试等模块。
二、什么是IOC(控制反转)容器?什么DI(依赖注入)?
ioc容器
要理解ioc容器,先要明白什么是ioc,中译为控制反转。
在传统的java开发中,java实例都是由开发人员进行new操作后创建的。但是ioc的概念是将类的实例创建交给spring来进行,容器存放或者会所承载了所有创建好的实例存放的地。
这种将由开发人员控制类的实例化交给spring来完成的操作称为控制反转,将控制权从人的手里交给了spring。简而言之,控制权从开发人员转变为容器,叫控制反转。
DI(依赖注入)
依赖注入指有依赖关系的类按照依赖关系放入容器中。这是控制反转的一种实现方式。
依赖注入的方式有三种:构造注入,setter方法注入,接口注入
三、什么是Bean?作用域是什么?生命周期又是什么?
Bean解释
Bean是springIoc容器完成的某个类实例化的对象。
Bean作用域
他的作用域有五种,分别是
- singleton:单例,不管怎样,容器中只有一个bean的实例。
- prototype:多例,和单利相反,每一次请求都提供一个实例。
- request:来自同一个客户端的请求共用一个实例。
- session:请求是同一个session共用一个实例。
- global-session:类似于 Session作用域,不过它仅仅在基于portlet的web应用中。
Bean生命周期
四、什么叫自动装配?有几种装配方法?
自动装配时满足bean依赖的一种方法,在应用上下文中为某个声明的变量寻找其依赖的bean。
- Spring有五种装配方法,分别为:
- no:spring框架的自动装配默认关闭。
- byName:根据名称设置依赖关系。
- byType:根据类的类型设置依赖关系。
- constructor:和byType类似,但是仅适用于有构造器参数相同的bean
- autodetect:使用constructor或者byType装配,首先使用constructor,若无相应构造器或者无参构造器,则使用bgType自动装配
五、Bean的实例过程
spring容器将对其管理的全部对象给予统一生命周期处理,管理的对象不在想以前一样(new完使用,随后回收)。过程如下:
- 实例化bean对象:采用策略模式,通过反射或者CGLIB动态字节码生成实例或者其子类
- 设置对象属性:BeanWarpper接口在框架内部使用,对bean对象操作,可以设置起属性值。
- 检查Aware相关接口并设置依赖:完成实例化后且设置属性值和相关依赖后,回检查当前实例是否实现了一系列的以Aware结尾的接口(例如BeanNameAware-将该对象实例的bean定义对应的beanName设置到当前对象实例),若实现,需注入依赖。
- BeanPostProcess前置处理:可以通过此对实例进行拓展
- 检查是否是InitializingBean以决定是否调用AfterPropertiesSet方法:检查是否实现此接口,若实现,可进一步调整对象实例状态或者信息。
- 检车是否配置有自定义的init-method
- BeanPostProcess后置处理
- 注册必要的destruction相关接口
- 使用中
- 是否实现DisposableBean接口:DisposableBean和Destroy提供了自定义销毁对象的机会
- 是否配置有自定义的Destroy接口
六、BeanFactory和ApplicationContext的区别
BeanFactory是含有bean集合的工厂类,在收到客户端请求时将对应bean实例化,同时生成协作类的关系。此外还包含了bean生命周期的控制,调用客户端的初始化方法(initializing methods)和销毁方法(destruction ethods)
applicationContext和beanFactory具有一样的bean定义、bean关联关系设置。但是他还提供了其他功能:
- 支持国际化的文本消息
- 统一的资源读取方式
- 监听器中注册的bean的时间
七、什么是AOP?
AOP为Aspect Oriented Programming的缩写,中译为面向切面编程。我们要在业务逻辑上增加的共有功能,如日志、安全、缓存、事务可以用到切面来实现。还常用来日志打印和接口耗时统计。
名词解释
- 通知(advice): 通过Aop让程序在目标方法执行前执行,或者执行后执行。
- 切点(pointcut):切点满足我们条件的目标方法。
- 连接点:连接点可以说是切点的全集。切点是连接点的子集。
- 切面:切面是切点和通知的组合称谓。
常见的通知
前置通知:方法执行前调用 对应注解 @Before
后置通知:方法执行后调用 对应注解 @After
返回通知:方法返回后调用 对应注解 @AfterReturning
异常通知:方法出现异常调用 对应注解 @AfterThrowing
环绕通知:自定义调用 对应注解 @Around