2.22、由springmvc中bean注入的开发方式体现出软件设计模式的开闭原则

启动服务的时候Spring会把所有的bean加载,进行实例化,不再需要代码中以new的方式实例化。就像医生做手术,手术前会把所有手术工具准备好,不会在做手术的途中再去准备。

一个一个的配置Bean工作量和new看起来差不多,目的是为了什么,是为什么后期更好的维护软件,这就和软件设计模式原则中的开闭原则有关了,即对增加开放,对修改关闭

例如,一个类,Car1 a = new Car1();当有需要对Car1进行改进,升级为Car2的时候,我们会修改java源码,这时候违背了设计原则,我们可以将Car作为一个接口,Car1和Car2都是Car接口的实现类,那么我们的JAVA代码中只需要写到Car a,不需要进行实例化,实例的工作交给Spring以bean的方式完成,这时候bean可以将 a 实例化为Car1或者Car2,就可以完成所谓的改进,这种方式没有修改源码,只是修改了bean。

context:上下文,上下文指的就是容器,装所需bean的容器,spring本身有一个容器,再web.xml里配置哪个xml是上下文,一般是applicationContext.xml。

web.xml里也需要配置DispatcherServlet(前端控制器)将其放在一个xml文件中,例如springServlet.xml中,DispatcherServlet扫描所有的Controller注解,放在DispatcherServlet自己的上下文中(),所有的请求先给到DispatcherServlet,然后DispatcherServlet根据请求选择合适的控制器去处理请求。

在springServlet.xml中我们需要配置DispatcherServlet在哪个包里扫描Controller注解,不然扫描全局工作量太大,在需要配置注解驱动,不然注解无效,还要配置视图解析器,来规定跳转页面的路径的一部分(前缀和后缀),然后根据Controller的返回值,加上前缀后缀组成一个页面的路径来显示。

(DispatcherServlet的上下文中也可以配置Bean,可以认为DispatcherServlet的上下文是子上下文,Sprin的上下文是父上下文,子上下文可以向父上下文索要东西,但反之不行,所以一般Bean全部配置在applicationContext中)

猜你喜欢

转载自blog.csdn.net/Ltoto/article/details/87883015