org.apache.struts2.spring

## Class ClassReloadingXMLWebApplicationContext

- java.lang.Object
- - org.springframework.core.io.DefaultResourceLoader
  - - org.springframework.context.support.AbstractApplicationContext
    - - org.springframework.context.support.AbstractRefreshableApplicationContext
      - - org.springframework.context.support.AbstractRefreshableConfigApplicationContext
        - - org.springframework.web.context.support.AbstractRefreshableWebApplicationContext
          - - org.springframework.web.context.support.XmlWebApplicationContext
            - - org.apache.struts2.spring.ClassReloadingXMLWebApplicationContext

- All Implemented Interfaces:
    Closeable, AutoCloseable, org.apache.commons.jci.monitor.FilesystemAlterationListener, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanFactory, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.HierarchicalBeanFactory, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.ListableBeanFactory, org.springframework.context.ApplicationContext, org.springframework.context.ApplicationEventPublisher, org.springframework.context.ConfigurableApplicationContext, org.springframework.context.Lifecycle, org.springframework.context.MessageSource, org.springframework.core.env.EnvironmentCapable, org.springframework.core.io.ResourceLoader, org.springframework.core.io.support.ResourcePatternResolver, org.springframework.ui.context.ThemeSource, org.springframework.web.context.ConfigurableWebApplicationContext, org.springframework.web.context.WebApplicationContext

      public class ClassReloadingXMLWebApplicationContext
      extends org.springframework.web.context.support.XmlWebApplicationContext
      implements org.apache.commons.jci.monitor.FilesystemAlterationListener

  This class can be used instead of XmlWebApplicationContext, and it will watch jar files and directories for changes and reload then changed classes.

  To use this class:

  - Set "struts.devMode" to "true"
  - Set "struts.objectFactory.spring.class.reloading.watchList" to a comma separated list of directories, or jar files (absolute paths)
  - Add this to web.xml:

          <context-param>
               <param-name>contextClass</param-name>
               <param-value>org.apache.struts2.spring.ClassReloadingXMLWebApplicationContext</param-value>
           </context-param>

  - Add Apache Commons JCI FAM to the classpath. If you are using maven, add this to pom.xml:

          <dependency>
               <groupId>org.apache.commons</groupId>
               <artifactId>commons-jci-fam</artifactId>
               <version>1.0</version>
               <optional>true</optional>
          </dependency>

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.springframework.core.io.DefaultResourceLoader

      `org.springframework.core.io.DefaultResourceLoader.ClassPathContextResource`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected ClassReloadingBeanFactory` | `beanFactory`
    `protected ReloadingClassLoader` | `classLoader`
    `protected org.apache.commons.jci.monitor.FilesystemAlterationMonitor` | `filesystemAlterationMonitor`

    - ### Fields inherited from class org.springframework.web.context.support.XmlWebApplicationContext

      `DEFAULT_CONFIG_LOCATION, DEFAULT_CONFIG_LOCATION_PREFIX, DEFAULT_CONFIG_LOCATION_SUFFIX`

    - ### Fields inherited from class org.springframework.context.support.AbstractApplicationContext

      `APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME`

    - ### Fields inherited from interface org.springframework.web.context.ConfigurableWebApplicationContext

      `APPLICATION_CONTEXT_ID_PREFIX, SERVLET_CONFIG_BEAN_NAME`

    - ### Fields inherited from interface org.springframework.web.context.WebApplicationContext

      `CONTEXT_ATTRIBUTES_BEAN_NAME, CONTEXT_PARAMETERS_BEAN_NAME, ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, SCOPE_APPLICATION, SCOPE_REQUEST, SCOPE_SESSION, SERVLET_CONTEXT_BEAN_NAME`

    - ### Fields inherited from interface org.springframework.context.ConfigurableApplicationContext

      `APPLICATION_STARTUP_BEAN_NAME, CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SHUTDOWN_HOOK_THREAD_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME`

    - ### Fields inherited from interface org.springframework.beans.factory.BeanFactory

      `FACTORY_BEAN_PREFIX`

    - ### Fields inherited from interface org.springframework.core.io.support.ResourcePatternResolver

      `CLASSPATH_ALL_URL_PREFIX`

    - ### Fields inherited from interface org.springframework.core.io.ResourceLoader

      `CLASSPATH_URL_PREFIX`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ClassReloadingXMLWebApplicationContext()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()`
    `protected org.springframework.beans.factory.support.DefaultListableBeanFactory` | `createBeanFactory()`
    `ReloadingClassLoader` | `getReloadingClassLoader()`
    `void` | `onDirectoryChange(File file)`
    `void` | `onDirectoryCreate(File file)`
    `void` | `onDirectoryDelete(File file)`
    `void` | `onFileChange(File file)`
    `void` | `onFileCreate(File file)`
    `void` | `onFileDelete(File file)`
    `void` | `onStart(org.apache.commons.jci.monitor.FilesystemAlterationObserver filesystemAlterationObserver)`
    `void` | `onStop(org.apache.commons.jci.monitor.FilesystemAlterationObserver filesystemAlterationObserver)`
    `protected void` | `prepareBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)`
    `void` | `refresh()`
    `void` | `setupReloading(String[] watchList, String acceptClasses, javax.servlet.ServletContext servletContext, boolean reloadConfig)`

    - ### Methods inherited from class org.springframework.web.context.support.XmlWebApplicationContext

      `getDefaultConfigLocations, initBeanDefinitionReader, loadBeanDefinitions, loadBeanDefinitions`

    - ### Methods inherited from class org.springframework.web.context.support.AbstractRefreshableWebApplicationContext

      `createEnvironment, getApplicationName, getConfigLocations, getNamespace, getResourceByPath, getResourcePatternResolver, getServletConfig, getServletContext, getTheme, initPropertySources, onRefresh, postProcessBeanFactory, setNamespace, setServletConfig, setServletContext`

    - ### Methods inherited from class org.springframework.context.support.AbstractRefreshableConfigApplicationContext

      `afterPropertiesSet, resolvePath, setBeanName, setConfigLocation, setConfigLocations, setId`

    - ### Methods inherited from class org.springframework.context.support.AbstractRefreshableApplicationContext

      `assertBeanFactoryActive, cancelRefresh, closeBeanFactory, customizeBeanFactory, getBeanFactory, hasBeanFactory, refreshBeanFactory, setAllowBeanDefinitionOverriding, setAllowCircularReferences`

    - ### Methods inherited from class org.springframework.context.support.AbstractApplicationContext

      `addApplicationListener, addBeanFactoryPostProcessor, containsBean, containsBeanDefinition, containsLocalBean, destroy, destroyBeans, doClose, findAnnotationOnBean, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getApplicationStartup, getAutowireCapableBeanFactory, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResources, getStartupDate, getType, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, prepareRefresh, publishEvent, publishEvent, publishEvent, registerBeanPostProcessors, registerListeners, registerShutdownHook, resetCommonCaches, setApplicationStartup, setDisplayName, setEnvironment, setParent, start, stop, toString`

    - ### Methods inherited from class org.springframework.core.io.DefaultResourceLoader

      `addProtocolResolver, clearResourceCaches, getClassLoader, getProtocolResolvers, getResource, getResourceCache, setClassLoader`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.springframework.web.context.ConfigurableWebApplicationContext

      `setConfigLocation, setConfigLocations`

    - ### Methods inherited from interface org.springframework.context.ConfigurableApplicationContext

      `addApplicationListener, addBeanFactoryPostProcessor, addProtocolResolver, getApplicationStartup, getBeanFactory, getEnvironment, isActive, registerShutdownHook, setApplicationStartup, setClassLoader, setEnvironment, setId, setParent`

    - ### Methods inherited from interface org.springframework.context.ApplicationContext

      `getAutowireCapableBeanFactory, getDisplayName, getId, getParent, getStartupDate`

    - ### Methods inherited from interface org.springframework.beans.factory.ListableBeanFactory

      `containsBeanDefinition, findAnnotationOnBean, findAnnotationOnBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation`

    - ### Methods inherited from interface org.springframework.beans.factory.HierarchicalBeanFactory

      `containsLocalBean, getParentBeanFactory`

    - ### Methods inherited from interface org.springframework.beans.factory.BeanFactory

      `containsBean, getAliases, getBean, getBean, getBean, getBean, getBean, getBeanProvider, getBeanProvider, getType, getType, isPrototype, isSingleton, isTypeMatch, isTypeMatch`

    - ### Methods inherited from interface org.springframework.context.MessageSource

      `getMessage, getMessage, getMessage`

    - ### Methods inherited from interface org.springframework.context.ApplicationEventPublisher

      `publishEvent, publishEvent`

    - ### Methods inherited from interface org.springframework.core.io.support.ResourcePatternResolver

      `getResources`

    - ### Methods inherited from interface org.springframework.core.io.ResourceLoader

      `getClassLoader, getResource`

    - ### Methods inherited from interface org.springframework.context.Lifecycle

      `isRunning, start, stop`

- - ### Field Detail

    - #### classLoader

          protected ReloadingClassLoader classLoader

    - #### filesystemAlterationMonitor

          protected org.apache.commons.jci.monitor.FilesystemAlterationMonitor filesystemAlterationMonitor

    - #### beanFactory

          protected ClassReloadingBeanFactory beanFactory

  - ### Constructor Detail

    - #### ClassReloadingXMLWebApplicationContext

          public ClassReloadingXMLWebApplicationContext()

  - ### Method Detail

    - #### setupReloading

          public void setupReloading(String[] watchList,
                                     String acceptClasses,
                                     javax.servlet.ServletContext servletContext,
                                     boolean reloadConfig)

    - #### close

          public void close()

      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `org.springframework.context.ConfigurableApplicationContext`
      Overrides:
        `close` in class `org.springframework.context.support.AbstractApplicationContext`

    - #### refresh

          public void refresh()
                       throws org.springframework.beans.BeansException,
                              IllegalStateException

      Specified by:
        `refresh` in interface `org.springframework.context.ConfigurableApplicationContext`
      Overrides:
        `refresh` in class `org.springframework.context.support.AbstractApplicationContext`
      Throws:
        `org.springframework.beans.BeansException`
        `IllegalStateException`

    - #### createBeanFactory

          protected org.springframework.beans.factory.support.DefaultListableBeanFactory createBeanFactory()

      Overrides:
        `createBeanFactory` in class `org.springframework.context.support.AbstractRefreshableApplicationContext`

    - #### prepareBeanFactory

          protected void prepareBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)

      Overrides:
        `prepareBeanFactory` in class `org.springframework.context.support.AbstractApplicationContext`

    - #### onDirectoryChange

          public void onDirectoryChange(File file)

      Specified by:
        `onDirectoryChange` in interface `org.apache.commons.jci.monitor.FilesystemAlterationListener`

    - #### onDirectoryCreate

          public void onDirectoryCreate(File file)

      Specified by:
        `onDirectoryCreate` in interface `org.apache.commons.jci.monitor.FilesystemAlterationListener`

    - #### onDirectoryDelete

          public void onDirectoryDelete(File file)

      Specified by:
        `onDirectoryDelete` in interface `org.apache.commons.jci.monitor.FilesystemAlterationListener`

    - #### onFileChange

          public void onFileChange(File file)

      Specified by:
        `onFileChange` in interface `org.apache.commons.jci.monitor.FilesystemAlterationListener`

    - #### onFileCreate

          public void onFileCreate(File file)

      Specified by:
        `onFileCreate` in interface `org.apache.commons.jci.monitor.FilesystemAlterationListener`

    - #### onFileDelete

          public void onFileDelete(File file)

      Specified by:
        `onFileDelete` in interface `org.apache.commons.jci.monitor.FilesystemAlterationListener`

    - #### onStart

          public void onStart(org.apache.commons.jci.monitor.FilesystemAlterationObserver filesystemAlterationObserver)

      Specified by:
        `onStart` in interface `org.apache.commons.jci.monitor.FilesystemAlterationListener`

    - #### onStop

          public void onStop(org.apache.commons.jci.monitor.FilesystemAlterationObserver filesystemAlterationObserver)

      Specified by:
        `onStop` in interface `org.apache.commons.jci.monitor.FilesystemAlterationListener`

    - #### getReloadingClassLoader

          public ReloadingClassLoader getReloadingClassLoader()

Copyright © 2000–2026 Apache Software Foundation. All rights reserved.