【发布时间】:2015-02-27 14:32:37
【问题描述】:
您好,我想知道在 Spring 中获取 ApplicationContext 对象的不同方法是什么? 我只知道一种方法,
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
还有其他方法吗?如果是,请告诉我。
谢谢。
【问题讨论】:
您好,我想知道在 Spring 中获取 ApplicationContext 对象的不同方法是什么? 我只知道一种方法,
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
还有其他方法吗?如果是,请告诉我。
谢谢。
【问题讨论】:
你也可以使用基于注解的配置
@Configuration
public class Config {
@Bean
public Bean1 bean1() {
return new Bean1();
}
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
}
}
【讨论】:
你可以实现接口ApplicationContextAware,像这样:
public class MyClass implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
}
如果你使用注解,你也可以自动装配它
@Autowired
private ApplicationContext applicationContext;
此外,您编写的代码获取现有应用程序上下文,它创建一个。
【讨论】:
嗯,有很多方法,我不知道谁会知道它们......
但首先,我们需要在实例化新上下文或获取正在运行的现有应用程序上下文之间有所不同。
new ***ApplicationContext 将创建一个新的上下文。因此所有子类of org.springframework.context.ApplicationContext 都可以用来创建一个新的ApplicationContext。您可以找到所有实现类here。实例化弹簧上下文的新方法是通过AnnotationConfigApplicationContext。
此外,您可以在 web.xml 中添加一个调度程序-servlet 或一个 servlet-listener。或者在 osgi 环境中使用像 gemini-blueprint 这样的框架,它会在 meta-inf/spring 中启动所有 xml 文件。 (例如日食处女座)
另一方面,您可以通过不同的方式获得现有的上下文(这意味着不是新的):
实现ApplicationContextAware接口,您将通过setApplicationContext(ApplicationContext applicationContext)方法获取上下文。
只需将@Autowired private ApplicationContext applicationContext; 添加到您的spring bean。但要确保它是春豆。
在您的网络应用程序中,您可以通过ApplicationContextUtils.getWebApplicationContext( servletcontext)获取您的侦听器上下文的上下文
还有很多方法,但这些都是我脑海中快速弹出的方法。
【讨论】:
如果您指的是创建 ApplicationContext 的可能方式,而不是通过代码传递此类实例的方式,那么我建议您查看Spring javadoc for ApplicationContext。所以基于此,这个接口的具体实现是:
org.springframework.context.annotation.AnnotationConfigApplicationContext
独立的应用程序上下文,接受带注释的类作为输入——特别是@Configuration-annotated 类,还有普通的@Component 类型和使用javax.inject 注释的JSR-330 兼容类。允许使用 register(Class...) 逐个注册类以及使用 scan(String...) 进行类路径扫描。
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
这本质上相当于 Web 环境的 AnnotationConfigApplicationContext。
org.springframework.context.support.ClassPathXmlApplicationContext
独立的 XML 应用程序上下文,从类路径中获取上下文定义文件,将普通路径解释为包含包路径的类路径资源名称(例如“mypackage/myresource.txt”)。对于测试工具以及嵌入在 JAR 中的应用程序上下文很有用。
org.springframework.context.support.FileSystemXmlApplicationContext
独立的 XML 应用程序上下文,从文件系统或 URL 中获取上下文定义文件,将纯路径解释为相对文件系统位置(例如“mydir/myfile.txt”)。对于测试工具以及独立环境很有用。
org.springframework.context.support.GenericApplicationContext
[...] 不采用特定 bean 定义格式的通用 ApplicationContext 实现
org.springframework.context.support.GenericXmlApplicationContext
具有内置 XML 支持的便捷应用程序上下文。这是 ClassPathXmlApplicationContext 和 FileSystemXmlApplicationContext 的灵活替代方案,可通过 setter 进行配置,最终调用 AbstractApplicationContext.refresh() 激活上下文。
org.springframework.context.support.GenericGroovyApplicationContext
扩展 GenericApplicationContext 的 ApplicationContext 实现。 [...] 将其视为 Groovy bean 定义的 GenericXmlApplicationContext 等价物,甚至是其升级,因为它也可以无缝地理解 XML bean 定义文件。
org.springframework.web.context.support.GenericWebApplicationContext
GenericApplicationContext 的子类,适用于 web 环境。
org.springframework.web.context.support.GroovyWebApplicationContext
WebApplicationContext 实现从 Groovy bean 定义脚本和/或 XML 文件获取配置,正如 GroovyBeanDefinitionReader 所理解的那样。这本质上相当于 Web 环境中的 GenericGroovyApplicationContext。
org.springframework.jca.context.ResourceAdapterApplicationContext
JCA ResourceAdapter 的ApplicationContext 实现。需要使用 JCA BootstrapContext 进行初始化,并将其传递给实现 BootstrapContextAware 的 Spring 管理的 bean。
org.springframework.context.support.StaticApplicationContext
ApplicationContext 实现支持 bean 和消息的编程注册,而不是从外部配置源读取 bean 定义。主要用于测试。
org.springframework.web.portlet.context.StaticPortletApplicationContext
用于测试的基于 Portlet 的静态 ApplicationContext 实现。不适用于生产应用程序。
org.springframework.web.context.support.StaticWebApplicationContext
用于测试的静态 WebApplicationContext 实现。不适用于生产应用程序。
org.springframework.web.portlet.context.XmlPortletApplicationContext
基于 Portlet 的 WebApplicationContext 实现,它从 XML 文档中获取配置,由 XmlBeanDefinitionReader 理解。
org.springframework.web.context.support.XmlWebApplicationContext
WebApplicationContext 实现,它从 XML 文档中获取配置,由 XmlBeanDefinitionReader 理解。这本质上相当于 Web 环境中的 GenericXmlApplicationContext。
【讨论】: