目录
四、Spring框架中的Bean是线程安全的吗? 如果线程不安全,要如何处理?
七、SpringMVC中的控制器是不是单例模式?如果是,如何保证线程安全?
一、什么是Spring?谈谈你对IOC和AOP的理解?
Spring: 是一个企业级java应用框架,他的作用主要是简化软件的开发以及配置过程,简化项目部署环境。
Spring的点有:
1、Spring低侵入设计,对业务代码的污染非常低。
2、Spring的DI机制将对象之间的关系交由框架处理,减少组件的耦合。
3、Spring提供了AOP技术,支持将一些通用的功能进行集中式管理,从而提供更好的复用。
4、Spring对于主流框架提供了非常好的支持。
IOC就是控制反转,指创建对象的控制权转移给Spring来进行管理。简单来说,就是应用不用去new对象了,而全部交由Spring自动生产。
IOC有三种注入方式:1、 构造器注入 2、setter方法注入 3、注解注入。
AOP 面向切面:
用于将那些与业务无关,但却对多个对象产生影响的公共行为。抽取并封装成一个可重用的模块。AOP的核心就是动态代理。JDK的动态代理和CGLIB动态代理。
二、Spring容器的启动流程是怎么样的?
使用AnnotationConfigApplicationContext 来跟踪一下启动流程:
(1)this():初始化reader和scanner
(2)scan(basePackages):使用scanner组件扫描basePackage下的所有对象,将配置类的BeanDefinition注册到容器中。
(3)refresh():刷新容器。
(4)prepareRefresh:刷新前的预处理
(5)obtainFreshBeanFactory: 获取在容器初始化时创建的BeanFactory
(6)prepareBeanFactory: BeanFactory的预处理工作,会向容器中添加一些组件。
(7)postProcessBeanFactory: 子类重写该方法,可以实现在BeanFactory创建并预处理完成后做进一步的设置。
(8)invokeBeanFactoryPostProcessors: 在BeanFactory初始化之后执行BeanFactory的后处理器。
(9)registerBeanPostProcessors: 向容器中注册Bean的后处理器,他的主要作用就是干预Spring初始化Bean的流程,完成代理、自动注入、循环依赖等这些功能。
(10)initMessageSource: 初始化messagesource组件,主要用于国际化。
(11)initApplicationEventMulticaster: 初始化事件分发器
(12)onRefresh: 留给子容器,子类重写的方法,在容器刷新的时候可以自定义一些逻辑。
(13)registerListene