哪个更好用,为什么? abstractapplication context或applicationcontext

时间:2014-11-03 10:45:25

标签: spring

我尝试ApplicationContextAbstractApplicationContext两者都运行良好。 这两者之间的唯一区别是registershutdownhook方法调用还是其他任何方法。想知道哪个更好

1 个答案:

答案 0 :(得分:1)

AbstractApplicationContext Reference Link

  

ApplicationContext接口的抽象实现。不   强制要求用于配置的存储类型;简单地实现   通用上下文功能。使用Template Method设计模式,   要求具体的子类来实现抽象方法。在   与普通的BeanFactory相比,ApplicationContext应该是   检测其内部bean工厂中定义的特殊bean:因此,   这个类自动注册BeanFactoryPostProcessors,   BeanPostProcessors和ApplicationListeners,定义为bean   在上下文中。

     

MessageSource也可以在上下文中作为bean提供   名称“messageSource”;否则,将委派消息解析   到父上下文。此外,还有一个多用途应用程序   事件可以作为类型的“applicationEventMulticaster”bean提供   ApplicationEventMulticaster在上下文中;否则,默认   将使用SimpleApplicationEventMulticaster类型的多播器。

     

通过扩展DefaultResourceLoader实现资源加载。   因此,将非URL资源路径视为类路径资源   (支持包含该包的完整类路径资源名称   路径,例如“mypackage / myresource.dat”),除非   DefaultResourceLoader.getResourceByPath(java.lang.String)方法是   在子类中覆盖。

ApplicationContext Reference Link

  

为应用程序提供配置的中央界面。这是   应用程序运行时只读,但如果是,则可以重新加载   实现支持这一点。 ApplicationContext提供:

     

用于访问应用程序组件的Bean工厂方法。遗传   来自ListableBeanFactory。加载文件资源的能力   通用时尚。继承自ResourceLoader接口。该   能够将事件发布给已注册的侦听器。继承自   ApplicationEventPublisher接口。解决消息的能力,   支持国际化。继承自MessageSource   接口。从父上下文继承。中的定义   后代上下文将始终优先。这意味着,例如,   整个Web应用程序可以使用单个父上下文,   而每个servlet都有自己独立的子上下文   任何其他servlet的。除了标准的BeanFactory   生命周期功能,ApplicationContext实现检测和   调用ApplicationContextAware bean以及ResourceLoaderAware,   ApplicationEventPublisherAware和MessageSourceAware bean。

结构

public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext, DisposableBean

public interface ConfigurableApplicationContext extends ApplicationContext

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver

ConfigurableApplicationContext声明此签名

/**
 * Register a shutdown hook with the JVM runtime, closing this context
 * on JVM shutdown unless it has already been closed at that time.
 * <p>This method can be called multiple times. Only one shutdown hook
 * (at max) will be registered for each context instance.
 * @see java.lang.Runtime#addShutdownHook
 * @see #close()
 */
void registerShutdownHook();

总之,我建议只使用AbstractApplicationContext,如果你真的想从上面获得其他功能,最好使用ApplicationContext。