SpringBoot(二)

编程

SpringBoot注册MVC

初始化内置tomcat

除了在properties中配置以外,还可以通过实现WebServerFactoryCustomizer来定制化SpringBoot的启动参数:

@Component

public class MvcConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> , Ordered {

@Override

public void customize(TomcatServletWebServerFactory factory) {

factory.setPort(8080);

}

@Override

public int getOrder() {

return 0;

}

}

所有的Customizer会被SpringBoot扫描到,并且应用到WebServerFactory中:

public class WebServerFactoryCustomizerBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware{

@Override

public void setBeanFactory(BeanFactory beanFactory) {

Assert.isInstanceOf(ListableBeanFactory.class, beanFactory,

"WebServerCustomizerBeanPostProcessor can only be used with a ListableBeanFactory");

this.beanFactory = (ListableBeanFactory) beanFactory;

}

private void postProcessBeforeInitialization(WebServerFactory webServerFactory) {

LambdaSafe.callbacks(WebServerFactoryCustomizer.class, getCustomizers(), webServerFactory)

.withLogger(WebServerFactoryCustomizerBeanPostProcessor.class)

.invoke((customizer) -> customizer.customize(webServerFactory));

}

private Collection<WebServerFactoryCustomizer<?>> getCustomizers() {

if (this.customizers == null) {

// Look up does not include the parent context

this.customizers = new ArrayList<>(getWebServerFactoryCustomizerBeans());

this.customizers.sort(AnnotationAwareOrderComparator.INSTANCE);

this.customizers = Collections.unmodifiableList(this.customizers);

}

return this.customizers;

}

private Collection<WebServerFactoryCustomizer<?>> getWebServerFactoryCustomizerBeans() {

return (Collection) this.beanFactory.getBeansOfType(WebServerFactoryCustomizer.class, false, false).values();

}

}

注册servlet组件

@ConditionalOnClass(DispatcherServlet.class)

public class DispatcherServletAutoConfiguration {

@Configuration

protected static class DispatcherServletConfiguration {

@Bean(name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)

public DispatcherServlet dispatcherServlet(WebMvcProperties webMvcProperties) {

DispatcherServlet dispatcherServlet = new DispatcherServlet();

dispatcherServlet.setDispatchOptionsRequest(webMvcProperties.isDispatchOptionsRequest());

dispatcherServlet.setDispatchTraceRequest(webMvcProperties.isDispatchTraceRequest());

dispatcherServlet.setThrowExceptionIfNoHandlerFound(webMvcProperties.isThrowExceptionIfNoHandlerFound());

dispatcherServlet.setPublishEvents(webMvcProperties.isPublishRequestHandledEvents());

dispatcherServlet.setEnableLoggingRequestDetails(webMvcProperties.isLogRequestDetails());

return dispatcherServlet;

}

@Configuration

@Import(DispatcherServletConfiguration.class)

protected static class DispatcherServletRegistrationConfiguration {

@Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)

@ConditionalOnBean(value = DispatcherServlet.class, name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)

public DispatcherServletRegistrationBean dispatcherServletRegistration(DispatcherServlet dispatcherServlet,

WebMvcProperties webMvcProperties, ObjectProvider<MultipartConfigElement> multipartConfig) {

DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(dispatcherServlet,

webMvcProperties.getServlet().getPath());

registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);

registration.setLoadOnStartup(webMvcProperties.getServlet().getLoadOnStartup());

multipartConfig.ifAvailable(registration::setMultipartConfig);

return registration;

}

}

}

以上是 SpringBoot(二) 的全部内容, 来源链接: utcz.com/z/517557.html

回到顶部