- 简单介绍下Spring?
spring是一款开源基于Java的开源框架,简化Java的开发,有三个重要的组件,IOC(控制反转),DI(依赖注入),AOP(面向切面编程)
2. 对于Spring IOC的认识
IOC,控制反转,反转的是对象的创建权,由Spring容器来统一创建对象
3. 谈谈自己对于AOP的理解
AOP,面向切面编程,在不修改源代码的情况下,进功能增强,底层使用的是动代理
4. Spring AOP和AspectJ AOP有什么区别?
Spring AOP和AspectJ AOP都可以在不修改源代码的情况下进行功能增强,Spring AOP是运行时增强,AspectJ AOP是编译时进行功能增强,Spring AOP集成了AspectJ AOP,AspectJ AOP功能更为强大,在为多个方法进行功能增强的时候更建议使用AspectJ AOP
5. Spring中的单例bean的线程安全问题了解吗?
Spring中单列的Bean没有解决线程安全问题,不过Spring中单列的Bean大部分都是无状态的,也没有共享的属性,所以可以相当于是线程安全的,我们可以将Bean的创建范围改为非单列模式的,每次从容器中拿Bean都会创建一个全新的对象,也可以使用ThreadLocal类,将共享资源放入当前线程的私有属性中,解决的线程安全问题
6. Spring中的bean生命周期?
BeanDefinition --->实例化 ---> 依赖注入 --->初始化 --->放到容器中使用 ---> 销毁
通过注解或者xml的方式获取所有的BeanDefinition,Bean定义的信息,放到BeanDefinitionMap中
实例化BeanDefinitionMap中的Bean,此时属性还没有赋值
依赖注入,给Bean中的属性赋值
初始化Bean中的属性
调用Spring容器的方法getBean()来从ConcurrentHashMap中获取对象
容器销毁,Bean也随着销毁