我一直在学习 Spring,很难弄清楚 ApplicationContext
的实现是为了什么。我有独立的 J2EE 应用程序,我对 Web* 或 Portlet* 实现不感兴趣。
您能否向我提供可能性的简短列表(如果不清楚,请参阅我的问题的附言部分)以及以下每个实现的目的:
ResourceAdapterApplicationContext
静态应用上下文
ClassPathXmlApplicationContext
FileSystemApplicationContext
附言
A 不要求您向我提供对文档的引用。例如:
ClassPathXmlApplicationContext Standalone XML application context, taking the context definition files from the class path, interpreting plain paths as class path resource names that include the package path
但是根据该定义,尚不清楚 ClassPathXmlApplicationContext
是否也实现了 AbstractRefreshableApplicationContext
并且可用于在不停止服务器的情况下更改 bean 定义。
最佳答案
很抱歉您不想引用文档,但这就是所有信息所在的位置。
StaticApplicationContext
状态
org.springframework.context.ApplicationContext
implementation which supports programmatic registration of beans and messages, rather than reading bean definitions from external onfiguration sources. Mainly useful for testing.
所以你直接用它来注册bean定义
StaticApplicationContext context = new StaticApplicationContext();
context.registerBeanDefinition(beanName, beanDefinition);
这可以用于需要动态更改 ApplicationContext
的情况。请注意,如果您需要这两种行为,则可以将父 ApplicationContext
传递给 StaticApplicationContext
,即。从 XML/Java 配置中读取并动态注册。
ClassPathXmlApplicationContext
在我看来是比较常见的 ApplicationContext
实现之一。您只需将它指向类路径上的 XML(bean 定义)资源,它就会加载它。 javadoc 状态
Useful for test harnesses as well as for application contexts embedded within JARs.
因此,您可以简单地指向来自 JAR 的类路径上的资源并加载它。以这种方式设置测试环境就足够了。
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("some-context.xml");
// boom you're ready to go
请注意,Spring 的 JUnit 支持类提供了其他(更好的)方法来设置测试环境。
But from that definition its not clear that
ClassPathXmlApplicationContext
also implementsAbstractRefreshableApplicationContext
and can be used to change beans definition without stopping server.
这就是 javadoc 的用途。
FileSystemXmlApplicationContext
类似于上面的ClasspathXmlApplicationContext
,但它从文件系统中获取配置文件,而不是从类路径中读取资源。
ResourceAdapterApplicationContext
状态
org.springframework.context.ApplicationContext
implementation for a JCAResourceAdapter
. Needs to be initialized with the JCAjavax.resource.spi.BootstrapContext
, passing it on to Spring-managed beans that implementBootstrapContextAware
.
我根本没有使用过这个,我不知道资源适配器在哪里有用,但是 here are some more docs .
关于java - Spring 容器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21185208/