spring|各大一线互联网公司还在用SpringBoot这是为什么?( 二 )


关于这个配置 , 我说如下几点:
@Configuration 注解表示这是一个配置类 , 在我们这里 , 这个配置的作用类似于applicationContext.xml
@ComponentScan 注解表示配置包扫描 , 里边的属性和 xml 配置中的属性都是一一对应的 , useDefaultFilters 表示使用默认的过滤器 , 然后又除去 Controller 注解 , 即在 Spring 容器中扫描除了 Controller 之外的其他所有 Bean。
3、 添加 SpringMVC 配置接下来再来创建 springmvc 的配置文件:
@Configuration@ComponentScan(basePackages = \"org.javaboy\"useDefaultFilters =falseincludeFilters = {@ComponentScan.Filter(type =FilterType.ANNOTATIONclasses = Controller.class))public class SpringMVCConfig {
注意 , 如果不需要在SpringMVC中添加其他的额外配置 , 这样就可以了 。 即视图解析器、JSON解析、文件上传......等等 , 如果都不需要配置的话 , 这样就可以了 。
4、配置 web.xml此时 , 我们并没 web.xml 文件 , 这时 , 我们可以使用Java代码去代替 web.xml 文件 , 这里会用到WebApplicationInitializer, 具体定义如下:
public class WebInit implements WebApplicationInitializer {public void onStartup(ServletContext servletContext) throws ServletException{//首先来加载 SpringMVC 的配置文件AnnotationConfigWebApplicationContext ctx = newAnnotationConfigWebApplicationContext();ctx.register(SpringMVCConfig.class);// 添加 DispatcherServletServletRegistration.Dynamic springmvc =servletContext.addServlet(\"springmvc\" new DispatcherServlet(ctx));// 给 DispatcherServlet 添加路径映射springmvc.addMapping(\"/\");// 给 DispatcherServlet 添加启动时机springmvc.setLoadOnStartup(1);
WebInit 的作用类似于 web.xml , 这个类需要实现 WebApplicationInitializer 接口 , 并实现接口中的方法 , 当项目启动时 , onStartup 方法会被自动执行 , 我们可以在这个方法中做一些项目初始化操作 , 例如加载 SpringMVC 容器 , 添加过滤器 , 添加 Listener、添加 Servlet 等 。
注意:
由于我们在WebInit中只是添加了SpringMVC的配置 , 这样项目在启动时只会去加载SpringMVC容器 , 而不会去加载 Spring 容器 , 如果一定要加载 Spring 容器 , 需要我们修改 SpringMVC 的配置 , 在SpringMVC 配置的包扫描中也去扫描 @Configuration 注解 , 进而加载 Spring 容器 , 还有一种方案可以解决这个问题 , 就是直接在项目中舍弃 Spring 配置 , 直接将所有配置放到 SpringMVC 的配置中来完成 , 这个在 SSM 整合时是没有问题的 , 在实际开发中 , 较多采用第二种方案 , 第二种方案 , SpringMVC 的配置如下:
@Configuration@ComponentScan(basePackages = \"org.javaboy\")public class SpringMVCConfig {
这种方案中 , 所有的注解都在 SpringMVC 中扫描 , 采用这种方案的话 , 则 Spring 的配置文件就可以删除了 。
5、测试最后 , 添加一个 HelloController, 然后启动项目进行测试:
@RestControllerpublic class HelloController {@GetMapping(\"/hello\")public String hello() {return \"hello\";
启动项目 , 访问接口 , 结果如下:
Spring Boot全局异常处理
在Spring Boot项目中, 异常统一处理 , 可以使用Spring中@ControllerAdvice来统一处理 , 也可以自己来定义异常处理方案 。 Spring Boot 中 , 对异常的处理有一些默认的策略 , 我们分别来看 。
默认情况下 , Spring Boot 中的异常页面 是这样的:
我们从这个异常提示中 , 也能看出来 , 之所以用户看到这个页面 , 是因为开发者没有明确提供一个/error 路径 , 如果开发者提供了 /error 路径, 这个页面就不会展示出来 , 不过在 Spring Boot 中 , 提供/error 路径实际上是下下策 , Spring Boot本身在处理异常时 , 也是当所有条件都不满足时 , 才会去找 /error 路径 。 那么我们就先来看看 , 在 Spring Boot 中 , 如何自定义 error 页面 , 整体上来说 , 可以分为两种 , 一种是静态页面 , 另一种是动态页面 。