1.Spring中bean的生命周期
面试回答:
1.当程序加载运行时会根据spring中配置文件找到bean配置的属性和方法,
并通过java反射机制创建实例化bean对象。
Bean实现了BeanNameAware接口,执行了setBeanName方法,实现注入对象。
2.实现了BeanFactoryAware工厂接口,执行了setBeanFactory方法。
3.实现了ApplicationContext接口类,执行了setsetApplicationContest方法。
4.实现了BeanPostProcessor接口类,执行postProcessBeforeInitialization方法
5.实现了InitiliazingBean 执行afterPropertiesSet方法,并加载配置文件定义了init-method 则执行对应初始化方法BeanPostProcessor 执行postProcessorfterInitilization方法,完成 Bean的初始化,使得bean可以使用。
6.实现了DisposabileBean接口,加载配置文件中的destroy-method方法销毁bean对象实例。
简要回答:
-
程序加载时创建bean的实例化对象。
-
注入bean的相关实现接口管理bean对象。
-
初始化bean对象。
-
关闭并销毁bean实例化对象。
2.java8的新特性
1.Lambda表达式
2.Stream函数式操作流元素集合
3.接口新增:默认方法与静态方法
4.方法引用,与Lambda表达式联合使用
5.引入重复注解
6.类型注解
7.最新的Date/Time API
8.新增base64加解密API
9.数组并行(parallel)操作
10.JVM的PermGen空间被移除:取代它的是Metaspace(JEP 122)
3.Spring中bean的作用域
在Spring中,可以在<bean>元素的scope属性里设置bean的作用域,以决定这个bean是单实例还是多实例的.
默认情况下,Spring只为每一在IOC容器里面声明的bean创建唯一一个实例,整个IOC容器范围内都能共享该实例:所有后续的getBean()调用和bean引用都将返回这个唯一的bean实例. 该作用域被称为singleton,他是所有bean的默认作用域
singleton:在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。
prototype:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。
4.Spring框架中的Bean是线程安全的么?
在spring框架中,并没有提供bean的线程安全策略,所以,spring容器中的bean并不具备线程安全的特性。