📄 xmlwebapplicationcontext.java
字号:
/*
* Copyright 2002-2004 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.web.context.support;
import javax.servlet.ServletContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.ui.context.Theme;
import org.springframework.ui.context.ThemeSource;
import org.springframework.ui.context.support.UiApplicationContextUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.context.ConfigurableWebApplicationContext;
/**
* WebApplicationContext implementation that takes configuration from an XML document.
*
* <p>By default, the configuration will be taken from "/WEB-INF/applicationContext.xml"
* for the root context, and "/WEB-INF/test-servlet.xml" for a context with the namespace
* "test-servlet" (like for a DispatcherServlet instance with the servlet-name "test").
*
* <p>The config location defaults can be overridden via setConfigLocations,
* respectively via the "contextConfigLocation" parameters of ContextLoader and
* FrameworkServlet. Config locations can either denote concrete files like
* "/WEB-INF/context.xml" or Ant-style patterns like "/WEB-INF/*-context.xml"
* (see PathMatcher javadoc for pattern details).
*
* <p>Note: In case of multiple config locations, later bean definitions will
* override ones defined in earlier loaded files. This can be leveraged to
* deliberately override certain bean definitions via an extra XML file.
*
* <p>Interprets resource paths as servlet context resources, i.e. as paths beneath
* the web application root. Absolute paths, e.g. for files outside the web app root,
* can be accessed via "file:" URLs, as implemented by AbstractApplicationContext.
*
* <p>In addition to the special beans detected by AbstractApplicationContext,
* this class detects a ThemeSource bean in the context, with the name
* "themeSource".
*
* @author Rod Johnson
* @author Juergen Hoeller
* @see #setNamespace
* @see #setConfigLocations
* @see #getResourcePatternResolver
* @see org.springframework.web.context.ContextLoader#initWebApplicationContext
* @see org.springframework.web.servlet.FrameworkServlet#initWebApplicationContext
* @see org.springframework.context.support.AbstractApplicationContext#getResource
* @see org.springframework.ui.context.ThemeSource
*/
public class XmlWebApplicationContext extends AbstractXmlApplicationContext
implements ConfigurableWebApplicationContext {
/** Default config location for the root context */
public static final String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";
/** Default prefix for building a config location for a namespace */
public static final String DEFAULT_CONFIG_LOCATION_PREFIX = "/WEB-INF/";
/** Default suffix for building a config location for a namespace */
public static final String DEFAULT_CONFIG_LOCATION_SUFFIX = ".xml";
/** Servlet context that this context runs in */
private ServletContext servletContext;
/** Namespace of this context, or null if root */
private String namespace = null;
/** Paths to XML configuration files */
private String[] configLocations;
/** the ThemeSource for this ApplicationContext */
private ThemeSource themeSource;
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
public ServletContext getServletContext() {
return this.servletContext;
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
protected String getNamespace() {
return this.namespace;
}
public void setConfigLocations(String[] configLocations) {
this.configLocations = configLocations;
}
protected String[] getConfigLocations() {
return this.configLocations;
}
public void refresh() throws BeansException {
if (this.namespace != null) {
setDisplayName("XmlWebApplicationContext for namespace '" + this.namespace + "'");
if (this.configLocations == null || this.configLocations.length == 0) {
this.configLocations = new String[] {DEFAULT_CONFIG_LOCATION_PREFIX + this.namespace +
DEFAULT_CONFIG_LOCATION_SUFFIX};
}
}
else {
setDisplayName("Root XmlWebApplicationContext");
if (this.configLocations == null || this.configLocations.length == 0) {
this.configLocations = new String[] {DEFAULT_CONFIG_LOCATION};
}
}
super.refresh();
}
protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
beanFactory.addBeanPostProcessor(new ServletContextAwareProcessor(this.servletContext));
beanFactory.ignoreDependencyType(ServletContext.class);
}
/**
* This implementation supports file paths beneath the root of the web application.
*/
protected Resource getResourceByPath(String path) {
return new ServletContextResource(this.servletContext, path);
}
/**
* Initialize the theme capability.
*/
protected void onRefresh() {
this.themeSource = UiApplicationContextUtils.initThemeSource(this);
}
public Theme getTheme(String themeName) {
return this.themeSource.getTheme(themeName);
}
/**
* Return diagnostic information.
*/
public String toString() {
StringBuffer sb = new StringBuffer(super.toString() + "; ");
sb.append("config locations=[" + StringUtils.arrayToCommaDelimitedString(this.configLocations) + "]; ");
return sb.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -