您好我想知道在Spring中获取ApplicationContext对象的不同方法是什么? 我只知道一种方式,
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
还有其他方法吗?如果是,请告诉我。
感谢。
答案 0 :(得分:4)
您还可以使用基于注释的配置
@Configuration
public class Config {
@Bean
public Bean1 bean1() {
return new Bean1();
}
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
}
}
答案 1 :(得分:1)
您可以实现界面ApplicationContextAware
,如下所示:
public class MyClass implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
}
如果您正在使用注释,您也可以自动加载
@Autowired
private ApplicationContext applicationContext;
此外,您编写的代码不会获取现有的应用程序上下文,而创建一个。
答案 2 :(得分:1)
嗯,那里有很多方法,我想知道谁会知道这些......
但首先,我们需要在即时创建新上下文或获取正在运行的现有应用程序上下文之间做出改变。
按new ***ApplicationContext
创建新的上下文。因此,所有子类of org.springframework.context.ApplicationContext
都可用于创建新的ApplicationContext。您可以找到所有实施类here。实例化spring-context的新方法是AnnotationConfigApplicationContext。
此外,您可以在web.xml中添加displatcher-servlet或servlet-listener。或者在osgi环境中使用像gemini-blueprint这样的框架,它启动meta-inf / spring中的所有xml文件。 (例如eclipse处女座)
另一方面,您可以通过不同的方式获得现有的上下文(这意味着不是新的上下文):
实施ApplicationContextAware界面,您将通过setApplicationContext(ApplicationContext applicationContext)
方法获取上下文。
只需将@Autowired private ApplicationContext applicationContext;
添加到您的spring bean即可。但要确保它是一个春天豆。
在您的网络应用程序中,您可以通过ApplicationContextUtils.getWebApplicationContext( servletcontext)
还有很多方法,但这些方法很快出现在我脑海中。
答案 3 :(得分:0)
如果您指的是创建ApplicationContext的可能方式,而不是这些实例可以通过代码传递的方式,那么我建议您查看Spring javadoc for ApplicationContext。因此,基于此,此接口的具体实现是:
<强> org.springframework.context.annotation.AnnotationConfigApplicationContext 强>
独立应用程序上下文,接受带注释的类作为输入 - 特别是@Configuration-annotated类,以及使用javax.inject注释的普通@Component类型和JSR-330兼容类。允许使用寄存器(Class ...)逐个注册类,以及使用scan(String ...)进行类路径扫描。
<强> org.springframework.web.context.support.AnnotationConfigWebApplicationContext 强>
这实际上相当于Web环境的AnnotationConfigApplicationContext。
org.springframework.context.support.ClassPathXmlApplicationContext
独立XML应用程序上下文,从类路径获取上下文定义文件,将普通路径解释为包含包路径的类路径资源名称(例如&#34; mypackage / myresource.txt&#34;)。适用于测试工具以及JAR中嵌入的应用程序上下文。
<强> org.springframework.context.support.FileSystemXmlApplicationContext 强>
独立XML应用程序上下文,从文件系统或URL获取上下文定义文件,将普通路径解释为相对文件系统位置(例如&#34; mydir / myfile.txt&#34;)。适用于测试工具以及独立环境。
<强> org.springframework.context.support.GenericApplicationContext 强>
通用ApplicationContext实现,它不假定特定的bean定义格式
<强> org.springframework.context.support.GenericXmlApplicationContext 强>
具有内置XML支持的便捷应用程序上下文。这是通过setter配置的ClassPathXmlApplicationContext和FileSystemXmlApplicationContext的灵活替代方案,最终激活上下文的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实现,从GroovyBeanDefinitionReader理解,从Groovy bean定义脚本和/或XML文件获取其配置。这基本上相当于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。