1.spring 中bean的生命周期(如果你熟悉springboot,比较一下)
spring bean的生命周期可以分为大概10步骤:
(1)instantiate bean对象实例化(实例化一个bean,也可以说是new)
(2) 按照spring上下文对实例化的bean进行配置,也就是IOC注入
(3)如果这个bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是spring配置文件中的bean的id.
(4)如果这个bean实现了BeanFactoryAware接口或applicationContextAware,会调用它实现的setBeanFactory()或上下文对象setapplicationContext,传递的是spring工厂本身。
(5)如果这个bean实现了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj,String s)方法,BeanPostProcessor经常被用做是Bean内容的更改,并且由于这个是在bean初始化结束时调用After方法,也可以用于内存或缓存技术,
(6)如果bean在spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。
(7)如果类实现了BeanPostProcessor(处理bean),执行postProcessAfterInitialization
(8) 执行业务处理
(9)如果Bean实现DisposableBean执行destory
(10)调用这个bean的spring配置中的destroy-method属性,会自动调用其配置的销毁方法、
2.描述一下spring的工作流程
1.用户向服务器发送请求,请求被spring前端控制servelt DispathcherServlet捕获,
2.DispathcharServlet对请求url进行解析,得到请求资源标识符(url),然后根际url调用HandlerMapping获得该handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutiochain对象的形式返回;
3.Dispathcharservlet根据获得的Handler,选择一个合适的HandlerAdapter.
4.提取Request中的模型数据,填充Handler入参,开始执行Handler(controller),在这里根据你的配置,spring将帮你做一些额外的工作,比如消息转换,数据转换,数据验证等。
5.handler执行完后,像Dispathcharservlet返回一个ModelAndView对象;
6.根据返回的ModelAndView,选择一个合适的ViewResolver返回给DispathcharServlet;
7.viewResolver结合Model和view渲染视图,将渲染结果返回给客户端;