你的位置:首页 > Java教程

[Java教程]一个最小化的SpringBoot项目


项目结构

项目基于Maven管理,注意使用了父pom

  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.3.0.RELEASE</version>    <relativePath />   </parent>

 

pom.

 

<project 

  App.class

package hello;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;@EnableAutoConfiguration@RestControllerpublic class App{  public static void main(String[] args)  {    SpringApplication.run(App.class, args);  }  @RequestMapping(value = "/test", method = RequestMethod.GET)  public String get()  {    return "get";  }  @RequestMapping(value = "/post", method = RequestMethod.POST)  public String post()  {    return "post";  }}

@EnableAutoConfiguration注解的作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置

@EnableAutoConfiguration注解上注释的翻译

自动配置Spring上下文,企图猜测所需要的Bean,将classpath和你所定义的Bean加入到IOC容器,比如你有tomcat-embedded.jar在你的classpath上

那么看起来你需要一个TomcatEmbeddedServletContainerFactory,那么SpringBoot会给你生成一个这个类的Bean(除非你已经生成这个类的Bean)

你可以使用exclude来指定那些Bean不需要SpringBoot帮你生成Bean

public @interface EnableAutoConfiguration {  /**   * Exclude specific auto-configuration classes such that they will never be applied.   * @return the classes to exclude   */  Class<?>[] exclude() default {};  /**   * Exclude specific auto-configuration class names such that they will never be   * applied.   * @return the class names to exclude   * @since 1.3.0   */  String[] excludeName() default {};}

在你的root package上使用这个注解,它会将这个目录下所有的子目录和类扫描一遍

@RestController和@RequestMapper注解由SpringMvc提供,用于创建Rest服务

关于@RequestMapper注解

value表示路径映射,method说明请求这个路径的Http方法

启动日志解读

2016-03-11 13:58:02.399 INFO 5776 --- [      main] hello.App                : Starting App on zzzzzz with PID 5776 (E:\space\spring\springboot\target\classes started by zzzzz in E:\space\spring\springboot)2016-03-11 13:58:02.404 INFO 5776 --- [      main] hello.App                : No profiles are active2016-03-11 13:58:02.508 INFO 5776 --- [      main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@481a15ff: startup date [Fri Mar 11 13:58:02 CST 2016]; root of context hierarchy2016-03-11 13:58:03.807 INFO 5776 --- [      main] o.s.b.f.s.DefaultListableBeanFactory   : Overriding bean definition for bean 'beanNameViewResolver' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]2016-03-11 13:58:05.107 INFO 5776 --- [      main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)2016-03-11 13:58:05.126 INFO 5776 --- [      main] o.apache.catalina.core.StandardService  : Starting service Tomcat2016-03-11 13:58:05.128 INFO 5776 --- [      main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.282016-03-11 13:58:05.268 INFO 5776 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]    : Initializing Spring embedded WebApplicationContext2016-03-11 13:58:05.268 INFO 5776 --- [ost-startStop-1] o.s.web.context.ContextLoader      : Root WebApplicationContext: initialization completed in 2769 ms2016-03-11 13:58:05.673 INFO 5776 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean    : Mapping servlet: 'dispatcherServlet' to [/]2016-03-11 13:58:05.680 INFO 5776 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]2016-03-11 13:58:05.681 INFO 5776 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]2016-03-11 13:58:05.681 INFO 5776 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]2016-03-11 13:58:05.682 INFO 5776 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]2016-03-11 13:58:06.022 INFO 5776 --- [      main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@481a15ff: startup date [Fri Mar 11 13:58:02 CST 2016]; root of context hierarchy2016-03-11 13:58:06.115 INFO 5776 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/test],methods=[GET]}" onto public java.lang.String hello.App.get()2016-03-11 13:58:06.116 INFO 5776 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/post],methods=[POST]}" onto public java.lang.String hello.App.post()2016-03-11 13:58:06.121 INFO 5776 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)2016-03-11 13:58:06.121 INFO 5776 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)2016-03-11 13:58:06.178 INFO 5776 --- [      main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2016-03-11 13:58:06.178 INFO 5776 --- [      main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2016-03-11 13:58:06.225 INFO 5776 --- [      main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2016-03-11 13:58:06.363 INFO 5776 --- [      main] o.s.j.e.a.AnnotationMBeanExporter    : Registering beans for JMX exposure on startup2016-03-11 13:58:06.468 INFO 5776 --- [      main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)2016-03-11 13:58:06.473 INFO 5776 --- [      main] hello.App                : Started App in 4.736 seconds (JVM running for 5.798)

 注意查看红色的部分,dispatcherServlet是SpringWeb的核心Servlet,所有进入SpringWeb的请求都由这个Servelt的service方法进入

2016-03-11 13:58:06.115 INFO 5776 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/test],methods=[GET]}" onto public java.lang.String hello.App.get()2016-03-11 13:58:06.116 INFO 5776 --- [      main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/post],methods=[POST]}" onto public java.lang.String hello.App.post()
表示我们声明的路径映射