Spring 相关

71 阅读3分钟

1.前言

Spring在Java开发中有着广泛的使用,本篇文章主要是探讨一下Spring的一些设计思想,思考下为什么要这么设计。

2.IOC

  1. IOC解决的是对象的管理和对象依赖的问题。本来是自己new出一个对象,现在则把对象交给Spring 的 IOC容器来进行管理。
  2. IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系。
  3. 控制反转依赖注入。IOC容器的概念,其中控制反转代表的是一种设计思想,就是把自己掌控的事情交给别人去处理。那么,Spring中怎么进行控制反转呢?就是通过依赖注入这个方式来进行实现。
  4. Spring IOC有什么好处? 或者说本来我可以直接new出来对象,为什么我要交给Spring IOC容器来进行管理呢? 答:使用Spring IOC可以方便对象创建复杂、对象依赖复杂、单例、bean生命周期等情况。如果用new出来的对象,可能需要自己写工厂,可能需要实现一大套东西。最后实现的可能是还是和Spring这一套一样,但是,现在Spring已经帮我们实现了啊。
    对象创建复杂:交给Spring创建
    对象依赖复杂:之前我们可能需要通过构造器进行依赖注入,现在直接通过Spring来进行注入
    单例 :如果一直new的话,浪费资源,现在这个对象可以设置为单例或者非单例,很灵活。
    bean生命周期:Spring 核心不仅仅是IOC,除了把对象创建出来,还有一整套的Bean生命周期管理,代表的扩展性很强,有很多扩展点。可以在生命周期上做很多事情。比如说:Spring AOP就是在生命周期上进行扩展的。

3.AOP

  1. AOP解决的是什么问题,底层实现原理是? 答:AOP解决的是非业务代码抽取的问题,底层的技术是动态代理,在Spring内实现依赖的是BeanPostProcessor。
  2. 你是否在实际过程中使用过AOP去优化你的代码? 答:一般使用AOP都可以基于 注解 + AOP来进行实现,提升AOP的灵活性,具体的实现可以查看我的另一篇文章
  3. 一般是怎么定义Bean的。 答:我用的一般有XML 注解 JavaConfig。

4.Spring MVC

  1. DispatcherServlet
  • 根据请求来确定那个控制器能进行处理
  • 拿到能执行这个类的所有方法的适配器(可以认为反射工具)
  • 适配器执行目标方法,返回ModelAndView;(虽然我们的返回值类型有很多,但是,适配器执行后,返回的都是ModelAndView)
  • 根据方法执行后的ModelAndView转发到目标页面,而且ModelAndView中的数据可以从请求域中获取。 路径如下: DispatcherServlet(入口)->DispatcherServlet.properties(会初始化的对象)->HandlerMapping(映射器)->HandlerExecutionChain(映射器+拦截器List) ->HttpRequestHandlerAdapter(适配器)->HttpMessageConverter(数据转换)