SpringBoot如何启动及自动装配-创新互联

小编这次要给大家分享的是SpringBoot如何启动及自动装配,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。

网站的建设创新互联专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为成都凿毛机等企业提供专业服务。

一、servlet2(老spring-mvc)

配置文件:

  • web.xml:主要配置项目启动项
  • application-context.xml:主要配置项目包扫描、各种bean、事务管理
  • springMVC.xml:主要配置controller包扫描、视图解析器、参数解析器
     

启动过程:

每一个spring项目启动时都需要初始化spring-context,对于非web项目可以在程序main方法中触发这个context的初始化过程。
由于web项目的启动入口在容器,所以开发者不能直接触发spring-context的初始化,就需要将初始化过程与容器的启动过程做强关联。

由于容器启动时会加载解析web.xml文件,所以web.xml正是建立关联的好地方。web.xml中所配置的ContextLoadListener就是这个关联点,它监听到容器启动了就会去初始化spring-context。

由于DispatcherServlet是全局核心控制器,所有的请求都需要被它拦截,所以他的启动时机需要配置,默认是第一个请求到来时才实例化它。

但是可以将它配置为随容器启动而初始化,在DispatcherServlet初始化过程中去读取springMVC.xml配置文件,完成controller映射、视图解析、参数解析等工作。

二、servlet3

Servlet3规定,如果在当前项目的classPath下,存在META-INF/services/javax.servlet.ServletContainerInitializer配置文件,且文件中写了ServletContainerInitializer的实现类的全类名,容器启动时实现类的onStartup方法就会被调用。在spring中配置的ServletContainerInitializer接口实现类是org.springframework.web.SpringServletContainerInitializer。

上面提到的spring提供的ServletContainerInitializer实现类上有一个@HandlesTypes(WebApplicationInitializer.class)注解,此注解会将括号中的WebApplicationInitializer接口在项目中的所有实现类组装为set,在SpringServletContainerInitializer的onStartup方法中进行遍历实例化并一一调用实例的onStartup方法,SpringBoot提供的WebApplicationInitializer接口实现类是SpringBootServletInitializer,此时项目的spring-contextdispatcherServlet初始化操作就可以放到这个方法中来,这样就取代了web.xml。

通过@Configuration注解,之前需要在spring-application-context.xml中配置的bean注入到了容器,此时对应的xml配置文件就被取代了。

springMVC.xml的主要功能是扫描具有@Controller的类,由于启动类上的@SpringBootApplication注解集成了@ComponentScan,它默认会扫描启动类当前包及子包下所有类,所以springMVC.xml的功能被取代了。

三、spring-boot启动

当执行spring-boot启动类的main函数时,会实例化一个Tomcat对象,然后调用了Tomcat对象的一连串方法:

Tomcat tomcat = new Tomcat();
tomcat.addWebApp("/", "D:/app/"); //调用此方法是将项目当做web项目放入容器,同时也会触发ServletContainerInitializer的onStartup方法
tomcat.setPort(8080);
tomcat.start();
tomcat.getServer().await(); //启动线程,阻塞等待

方法添加@ResponseBody注解表示返回值交给消息转换处理,否则就交给视图解析器处理。

@Configuration
public class GsonMessageConverterConfig implements WebMvcConfigurer {

	@Override //自定义消息解析器
	public void extendMessageConverters(List> converters) {
		converters.add(new GsonHttpMessageConverter());
	}

	@Override //自定义视图解析器
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/", ".jsp");
	}
}

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:SpringBoot如何启动及自动装配-创新互联
分享URL:http://scjbc.cn/article/eiedp.html

其他资讯