java - Spring 容器实现

标签 java spring jakarta-ee

我一直在学习 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 implements AbstractRefreshableApplicationContext and can be used to change beans definition without stopping server.

这就是 javadoc 的用途。


FileSystemXmlApplicationContext 类似于上面的ClasspathXmlApplicationContext,但它从文件系统中获取配置文件,而不是从类路径中读取资源。


ResourceAdapterApplicationContext 状态

org.springframework.context.ApplicationContext implementation for a JCA ResourceAdapter. Needs to be initialized with the JCA javax.resource.spi.BootstrapContext, passing it on to Spring-managed beans that implement BootstrapContextAware.

我根本没有使用过这个,我不知道资源适配器在哪里有用,但是 here are some more docs .

关于java - Spring 容器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21185208/

相关文章:

java - 如何在不轮询的情况下从 Java Web 应用程序获取响应?

java - 在拦截器中抛出 ConstraintViolationException

java - Spring:具有基于日期时间的队列的任务执行器服务

java - 如何以编程方式关闭 WAR/EAR

java - 为什么gwt CellTable不显示所有结果?

java - 解析 json 错误 : java. lang.IllegalStateException: Not a JSON Object:

java - 如何在ARCore中获取最新的检测到的平面?

java - 每个 uiBinder 有几个 css

java - Spring 安全: Cannot resolve reference to bean while setting constructor argument

java - 如何将 XML 配置转换为 Java