flight.Archives002布局指南

public ServletContextInitializerBeans(ListableBeanFactory beanFactory, Class<? extends ServletContextInitializer>...
initializerTypes) { this.initializers = new LinkedMultiValueMap<>();
//由于我们没有传initializerTypes这个参数,所以this.initializerTypes里面就只有ServletContextInitializer.class这个类
this.initializerTypes = (initializerTypes.length != 0) ? Arrays.asList(initializerTypes) :
Collections.singletonList(ServletContextInitializer.class); //这里主要是从beanFactory中查找this.initializerTypes类型,
我们进去看看,就是下面这个方法了 addServletContextInitializerBeans(beanFactory);
addAdaptableBeans(beanFactory); List<ServletContextInitializer> sortedInitializers =
this.initializers.values().stream() .flatMap((value) -> value.stream().sorted(AnnotationAwareOrderComparator.INSTANCE)) .
collect(Collectors.toList()); this.sortedList = Collections.unmodifiableList(sortedInitializers);
logMappings(this.initializers); } private void addServletContextInitializerBeans(ListableBeanFactory beanFactory)
{ for (Class<? extends ServletContextInitializer> initializerType : this.initializerTypes)
{ //默认情况下这里找到就只有上面第3部分的DispatcherServletRegistrationBean对应的bean for (Entry<
String, ? extends ServletContextInitializer> initializerBean : getOrderedBeansOfType(beanFactory, initializerType))
{ //这里的key是bean的名字,value就是bean对象,在进去看看,就是下面这个方法 addServletContextInitializerBean(initializerBean.getKey(), initializerBean.getValue(), beanFactory); } } } private void addServletContextInitializerBean(String beanName,
ServletContextInitializer initializer, ListableBeanFactory beanFactory) { //会走到这个分支 if (initializer instanceof ServletRegistrationBean) { //这里返回的servlet也还是第3部分DispatcherServlet对应的bean Servlet source = ((ServletRegistrationBean<?>) initializer).getServlet();
//再点进去 addServletContextInitializerBean(Servlet.class, beanName, initializer, beanFactory, source);
} else if (initializer instanceof FilterRegistrationBean) { Filter source = ((FilterRegistrationBean<?>) initializer).getFilter();
addServletContextInitializerBean(Filter.class, beanName, initializer, beanFactory, source); } else if (initializer instanceof DelegatingFilterProxyRegistrationBean) { String source = ((DelegatingFilterProxyRegistrationBean) initializer).getTargetBeanName();
addServletContextInitializerBean(Filter.class, beanName, initializer, beanFactory, source); }
else if (initializer instanceof ServletListenerRegistrationBean) { EventListener source =
((ServletListenerRegistrationBean<?>) initializer).getListener(); addServletContextInitializerBean(EventListener.class,
beanName, initializer, beanFactory, source); } else { addServletContextInitializerBean(ServletContextInitializer.class, beanName, initializer, beanFactory, initializer); } } private void addServletContextInitializerBean(Class<?> type, String beanName, ServletContextInitializer initializer, ListableBeanFactory beanFactory, Object source) { //这里的initializers是个map,按照类型,bean对象进行加载,
这里的type是javax.servlet.Servlet.class,value是上面的DispatcherServletRegistrationBean this.initializers.add(type, initializer); if (source != null) { // Mark the underlying source as seen in case it wraps an existing bean //将DispatcherServlet对应的bean加到这里 this.seen.add(source); } if (logger.isTraceEnabled()) { String resourceDescription = g
etResourceDescription(beanName, beanFactory);
int order = getOrder(initializer); logger.trace("Added existing " + type.getSimpleName() + " initializer bean '" + beanName + "'; order=" + order + ", resource=" + resourceDescription);
private <T, B extends T> void addAsRegistrationBean(ListableBeanFactory beanFactory, Class<T> type,
Class<B> beanType, RegistrationBeanAdapter<T> adapter) { //这里的beanType是 Filter.class,下面这句就是从beanFactory中获取所有类型为Filter.class的bean List<Map.Entry<String, B>> entries = getOrderedBeansOfType(beanFactory, beanType, this.seen); for (Entry<String, B> entry : entries) { String beanName = entry.getKey(); B bean = entry.getValue(); //
将bean放置到this.seen里面 if (this.seen.add(bean)) { // One that we haven't already seen //包装成RegistrationBean对象 RegistrationBean registration = adapter.createRegistrationBean(beanName, bean, entries.size()); int order = getOrder(bean); registration.setOrder(order); //同样放置到this.initializers里面 this.initializers.add(type, registration);
if (logger.isTraceEnabled()) { logger.trace("Created " + type.
getSimpleName() + " initializer for bean '" + beanName + "'; order=" + order + ", resource=" + getResourceDescription(beanName, beanFactory));

posted @ 2021-09-04 09:53  v17166570219  阅读(24)  评论(0)    收藏  举报