我是springboot应用程序开发的新手,我在这个url https://start.spring.io/的帮助下生成了我的项目,当我在IDE中打开这个项目时,生成了2个类 这是第一堂课
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(TravellingApplication.class);
}}
这是第二类
@SpringBootApplication
public class TravellingApplication {
public static void main(String[] args) {
SpringApplication.run(TravellingApplication.class, args);
}}
我真的不知道我configure method
班的Servletinitializer
内发生了什么。
如果删除这两个类,我可以编写更好的代码配置
并做这样的事情,
class simmilar to dispatcherservlet.xml
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.travelliing")
public class WebConfig extends WebMvcConfigurerAdapter {
}
class simmilar to web.xml
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException { }
}
如果我错了,请纠正我。我认为ServletInitializer class
和webAppInitializer
具有相同的功能,因为不知何故implement WebApplicationInitializer
。
除了configure method in servletInitializer class
。
使用 @SpringBootApplication 注释的travellingApplication class
发生的事情与webConfig Class
的{{1}}类似,扩展了WebMvcConfigureAdapter
答案 0 :(得分:1)
两个类都加载Spring应用程序上下文。
如果您将应用程序作为普通的Java应用程序运行,将使用带有main方法(TravellingApplication
)的类。例如,如果您执行Run As - >来自Eclipse的Java applciatnion,或者将应用程序打包为jar并从命令行运行java -jar myApp.jar
。
如果将应用程序打包为war文件并将其部署在Tomcat或支持Servlet 3.0+的其他Web服务器中,则将使用SpringBootServletInitializer加载应用程序上下文。它基本上取代了web.xml
。
我真的不知道在configure方法中发生了什么 我的Servletinitializer类。
TravellingApplication是一个@Configuration类 - 它声明了Spring bean和其他Spring配置,所以这一行 - return application.sources(TravellingApplication.class);
只加载这个配置(应用程序上下文)。在main方法中发生的事情也一样。
使用带注释的travellingApplication类发生了什么 @SpringBootApplication与我的webConfig类相似 扩展WebMvcConfigureAdapter
@SpringBootApplication
只是
@Configuration
@EnableAutoConfiguration
@ComponentScan
请参阅here。