SpringIOC容器和WEB容器的相通问题探讨

问题引入

  1. set方式依赖注入

在经典的JAVAWEB三层中,Servlet去调用Service实现类,进行逻辑操作,学习Spring以后将最初的new 对象操作变成了依赖注入方式,以下是set方式注入代码:
SpringIOC容器和WEB容器的相通问题探讨
SpringIOC容器和WEB容器的相通问题探讨

  • 运行然后报空指针异常,service为Null,是因为注入失败?并不是。
    SpringIOC容器和WEB容器的相通问题探讨
  • 原因详解:其实注入成功了,但是在浏览器发送请求时,请求的是WEB容器中的Userservlet而非Spring容器中的那个Userservlet,所以报NULL指针异常!
    SpringIOC容器和WEB容器的相通问题探讨

解决方案

  • servlet的init初始化方法中获取springIOC容器中的对象(原理:其实就是在WEB容器中的servlet的init方法中去主动的getBean即获取usi对象)
    SpringIOC容器和WEB容器的相通问题探讨
  • 用Spring注解自动装配进行依赖注入
    (原理:注解本身就是在WEB容器中那个servlet上标注的,他代替了springXML所配置的用于servlet依赖注入的Bean,注解会自动去IOC容器中寻找符合该对象的Bean给WEB容器中的这个servlet进行依赖注入,该注解默认是bytype,也可以自己设置其他方式)
    SpringIOC容器和WEB容器的相通问题探讨