VB_*_*VB_ 4 java spring java-ee
我继续学习Spring,很难弄清楚它的ApplicationContext用途是什么.我是独立的J2EE应用程序,我对Web*或Portlet*实现不感兴趣.
您能否向我提供可能性的简要列表(如果不清楚,请参阅我的问题的PS部分)以及下面每个实现的目的:
ResourceAdapterApplicationContextStaticApplicationContextClassPathXmlApplicationContextFileSystemApplicationContextPS
A不要求你提供给我的文档参考.例如:
ClassPathXmlApplicationContext独立XML应用程序上下文,从类路径获取上下文定义文件,将普通路径解释为包含包路径的类路径资源名称
但是根据该定义,ClassPathXmlApplicationContext还不清楚它是否也实现AbstractRefreshableApplicationContext并且可以用于在不停止服务器的情况下更改bean定义.
对不起,您不希望引用文档,但这就是所有信息的所在.
StaticApplicationContext 状态
org.springframework.context.ApplicationContext实现,它支持bean和消息的编程注册,而不是从外部配置源读取bean定义.主要用于测试.
所以你用它来直接注册bean定义
StaticApplicationContext context = new StaticApplicationContext();
context.registerBeanDefinition(beanName, beanDefinition);
Run Code Online (Sandbox Code Playgroud)
这可以在ApplicationContext需要动态更改的情况下使用.请注意,您可以通过父母ApplicationContext的StaticApplicationContext,如果你既需要的行为,即.从XML/Java配置读取并动态注册.
ClassPathXmlApplicationContextApplicationContext在我看来,这是更常见的实现之一.您只需将其指向类路径上的XML(bean定义)资源,然后将其加载即可.javadoc说
适用于测试工具以及JAR中嵌入的应用程序上下文.
因此,您可以简单地指向来自JAR的类路径上的资源并加载它.以这种方式设置测试环境就足够了.
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("some-context.xml");
// boom you're ready to go
Run Code Online (Sandbox Code Playgroud)
请注意,Spring的JUnit支持类提供了其他(更好)的方法来设置测试环境.
但是根据该定义,
ClassPathXmlApplicationContext还不清楚它是否 也实现AbstractRefreshableApplicationContext并且可以用于在不停止服务器的情况下更改bean定义.
这就是javadoc的用途.
FileSystemXmlApplicationContext与ClasspathXmlApplicationContext上面类似,但它从文件系统获取配置文件,而不是从类路径中读取资源.
ResourceAdapterApplicationContext 状态
org.springframework.context.ApplicationContextJCA的实施ResourceAdapter.需要使用JCA初始化javax.resource.spi.BootstrapContext,将其传递给实现的Spring管理的beanBootstrapContextAware.
我根本没有使用过这个,我不知道资源适配器在哪里有用,但这里有一些更多的文档.
只是将一些东西添加到@Solitirios答案:
您忘记提及其他几个上下文:
还有许多其他。
在一般情况下,GenericApplicationContext几乎是一样的StaticApplicationContext,它们之间唯一的不同MessageSource支持StaticApplicationContext。这两个类的目的都是通过带有几个bean的小型应用程序上下文进行小型测试。
GenericWebApplicationContext并且StaticWebApplicationContext彼此非常相似,通常它们用于Servlet容器的仿真,例如测试或非Servlet环境。
Fe,您可以在代码中使用如下所示的内容(fe测试):
//create parent context
ApplicationContext xmlContext = new GenericXmlApplicationContext("classpath:/spring-*.xml");
//create mock servlet context
MockServletContext mockServletContext = new MockServletContext();
//create web context
GenericWebApplicationContext webContext = new GenericWebApplicationContext(mockServletContext);
//set attribute
mockServletContext.setAttribute(GenericWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, webContext);
//set parent context
webContext.setParent(xmlContext);
//refresh context
webContext.refresh();
Run Code Online (Sandbox Code Playgroud)
但是有一些上下文类,值得关注。考虑到您的前提条件,我会选择其中之一。
GenericXmlApplicationContext是ClassPathXmlApplicationContext和的很好替代FileSystemXmlApplicationContext。考虑以下示例:
ApplicationContext context = new GenericXmlApplicationContext("classpath:some-context.xml");
Run Code Online (Sandbox Code Playgroud)
相当于
ApplicationContext context = new ClassPathXmlApplicationContext("some-context.xml");
Run Code Online (Sandbox Code Playgroud)
要么
ApplicationContext context = new GenericXmlApplicationContext("some-context.xml");
Run Code Online (Sandbox Code Playgroud)
相当于
ApplicationContext context = new FileSystemXmlApplicationContext("some-context.xml");
Run Code Online (Sandbox Code Playgroud)
因此GenericXmlApplicationContext看起来更灵活。
如果您不想将bean保留在XML文件中,则AnnotationConfigApplicationContext是上下文持有者。
//context creation
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
//context class
@Configuration
@ComponentScan("com.examples.services")
public class AppConfig {
@Bean
public DataSources dataSource() {
DataSource ds = new BasicDataSource();
//... init ds
return ds;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到更多信息。
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |