1、Spring框架有什么好处?
- 简化开发,DI依赖关系一目了然,IOC容器管理好系统中的Bean
- 兼容成熟的框架,Hibernate、MyBatis、Shiro、各种数据类型访问框架
- 模块化设计,即插即用,按需分配
- 自带测试组件
- 声明式事务,将非功能性代码和功能性代码分离,事务管理提前声明
- 过度设计嫌疑,完美分离了Servlet和普通Bean
2、BeanFactory和ApplicationContext的区别
ApplicationContext是BeanFactory的子接口,扩展了BeanFactory的方法;beanFactory的关键方法 getBean();
ApplicationContext
- 提供了对IOC容器中Bean的监控,生命周期 PostProcessor会在Bean创建,销毁的时候触发事件
Aware
ApplicationEvent
ContextRefreshedEvent
ContextStartedEvent
ContextStopedEvent
2. 支持国际化i18n
3. 扩展了统一资源文件读取方式URL,可以是本地URL,也可以是网络URL
ClassPathXmlApplicationContext
FileSystemXmlApplication
XmlWebApplicationContext网络文件
AnnotationConfigApplicationContext
3、请解释Bean的生命周期
建立在Spring的监听机制
- InitializingBean DisposableBean用来回调
- Aware接口
- init() destroy()
- @PostConstruct 和 @PreDestroy
4、Spring Bean个作用域之间的区别?
总共5个范围,对象什么时候创建,什么时候销毁。
SpringBean 有5种生命
- 什么时候用,什么出生,用完就死(prototype)
- 从容器启动就产生,直到Spring销毁。(Singleton)
web层 - request出生的时候就出生,request销毁的时候就销毁
- session出生的时候就出生,session销毁的时候就销毁
- global-session Context(上下文)
5、Spring中的Bean是线程安全的吗?
Spring Bean由IOC容器来创建,创建的对象由开发人员写的。
BeanDefinition BeanWrapper instance Class.newInstance(); new Object()
Map<String,BeanWrapper>做了一次代理,用一个新的类代替了原来的类。
Bean安不安全跟我们写的代码有关系,跟Spring无关。
6、Spring框架中常用的设计模式
工厂模式;
策略模式;
模板模式;
代理模式;
7、Spring是怎样处理循环依赖问题的
缓存机制解决循环依赖的问题,首先初始化可以创建的,第二次重新赋值
8、BeanFactory和FactoryBean的区别
9、怎样从Service中获取ApplicationContext
实现ApplicationContextAware接口