GVKun编程网logo

获取Spring应用程序上下文(如何获取spring上下文)

18

在本文中,我们将给您介绍关于获取Spring应用程序上下文的详细内容,并且为您解答如何获取spring上下文的相关问题,此外,我们还将为您提供关于java–Maven项目中的每个模块都应该有自己的Sp

在本文中,我们将给您介绍关于获取Spring应用程序上下文的详细内容,并且为您解答如何获取spring上下文的相关问题,此外,我们还将为您提供关于java – Maven项目中的每个模块都应该有自己的Spring应用程序上下文吗?、java – Spring应用程序上下文加载顺序、java – 从string加载spring应用程序上下文、java – 使用Web应用程序上下文的Spring上下文层次结构的知识。

本文目录一览:

获取Spring应用程序上下文(如何获取spring上下文)

获取Spring应用程序上下文(如何获取spring上下文)

有没有办法在Spring应用程序中静态/全局地请求ApplicationContext的副本?

假设主类启动并初始化了应用程序上下文,它是否需要通过调用堆栈将其向下传递给需要它的任何类,或者是否有一种方法可以让类要求先前创建的上下文?(我认为必须是单身人士?)

答案1

小编典典

如果需要访问容器的对象是容器中的Bean,则只需实现BeanFactoryAware或ApplicationContextAware接口。

如果容器外部的对象需要访问该容器,那么我已经对弹簧容器使用了标准的GoF单例模式。这样,你的应用程序中只有一个单例,其余都是容器中的所有单例bean。

java – Maven项目中的每个模块都应该有自己的Spring应用程序上下文吗?

java – Maven项目中的每个模块都应该有自己的Spring应用程序上下文吗?

我正在创建一个应用程序,我将项目分成不同的模块,如(域,存储库,服务和Web),以及许多用于邮件发送,文本格式化等的通用maven项目.我也使用 Spring.

目前我只在Web项目中使用Spring应用程序上下文文件.但是,由于我正在为文本格式化等创建一般的pupose项目,它将库(例如freemarker)封装到实际应用程序中,我不喜欢我必须在Web项目的Spring应用程序上下文文件中指定库依赖配置.

问题是,为每个模块分配一个单独的Spring应用程序上下文文件,然后在我使用它们的项目中导入上下文文件是否正确.这是正确的方法吗,还是有更好的方法?

我感兴趣的是当我使用XML文件而不是JavaConfig时如何解决这个问题.

解决方法

为所有模块创建applicationContext.xml配置并将其放在模块中,然后从Web模块导入所有模块的所有配置.

web.xml中

<!-- Context Configuration locations for Spring XML files -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:/applicationContext-resources.xml
        classpath:/applicationContext-dao.xml
        classpath:/applicationContext-service.xml
        classpath*:/applicationContext.xml
        /WEB-INF/applicationContext*.xml
        /WEB-INF/cxf-servlet.xml
        /WEB-INF/security.xml
    </param-value>
</context-param>

在此示例中,所有applicationContext.xml都是从模块导入的.

此示例代码是从AppFuse应用程序复制的,请查看此应用程序的配置方式.使用AppFuse构建示例多模块Spring应用程序:

mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-spring-archetype -DarchetypeVersion=3.0.0 -DgroupId=com.mycompany -DartifactId=myproject -DarchetypeRepository=http://oss.sonatype.org/content/repositories/appfuse

参考文献:

> Splitting applicationContext to multiple files
> Appfuse Quickstart

java – Spring应用程序上下文加载顺序

java – Spring应用程序上下文加载顺序

在我的web.xml上,我有一个“springmvc”servlet声明(它有一个相应的springmvc-servlet.xml)

dispatcherServletservlet-mapping>
    servlet-mapping>

我也有我常用的applicationContext.xml文件.

首先加载哪一个? springmvc-servlet.xml还是applicationContext.xml?

我问这个的原因是每当我放置< mvc:annotation-driven /> applicationContext.xml中的元素,我收到严重上下文错误.但是当我将该元素放在springmvc-servlet.xml中时,我的Web应用程序运行正常.

有什么想法吗?

在另一个网络应用程序中,我有< mvc:annotation-driven />在applicationContext.xml中,它运行正常.

附录:
我注意到aop:config的存在与mvc:annotation-driven冲突

最佳答案
applicationContext.xml上下文是dispatcher-servlet.xml上下文的父级.我不知道这是否意味着它首先被加载,但在你的情况下并不重要:

< mvc:annotation-driven />必须在dispatcher-servlet.xml中,因为它属于应用程序的Web部分.

java – 从string加载spring应用程序上下文

java – 从string加载spring应用程序上下文

有人可以告诉我如何使用 Spring通过xml字符串而不是文件或类路径资源来加载应用程序上下文?

谢谢,

解决方法

用这个:
String contextxML = ...;
Resource resource = new ByteArrayResource(contextxML.getBytes());
GenericXmlApplicationContext springContext = new GenericXmlApplicationContext();
springContext.load(resource);
Object myBean = springContext.getBean("myBean");
...

雷扎

java – 使用Web应用程序上下文的Spring上下文层次结构

java – 使用Web应用程序上下文的Spring上下文层次结构

我正在处理一个使用dispatcherServlet引导的 Spring MVC Web应用程序.它创建一个管理整个应用程序的XmlWebApplicationContext:
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.dispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

现在有一些模块应该使用ContextSingletonbeanfactoryLocator在运行时加载.因此每个模块都有自己的ClasspathXmlApplicationContext.所以一个模块可以引用XmlWebApplicationContext中的bean,它应该被附加到XmlWebApplicationContext以形成一个上下文层次结构,其中XmlWebApplicationContext应该扮演父类的角色,并且该模块的ClasspathXmlApplicationContext是子上下文的角色.不幸的是我无法连接他们使用

<beans>
    <bean id="moduleContext"https://www.jb51.cc/tag/ssp/" target="_blank">sspathXmlApplicationContext">
        <constructor-arg>
            ...
        </constructor-arg>
        <constructor-arg ref="parentContext" />
    </bean>
</beans>

因为我没有找到没有办法给WebApplicationContext的名称为parentContext.我忽略了一些东西,还是有一种更好/更容易的方式来实现不同的方式?

解决方法

如果您使用注释,您可以这样做:
@Inject
private XmlWebApplicationContext context;

@Inject
private List<ClasspathXmlApplicationContext> childs;

@postconstruct
public void refreshContext() {
    for(ClasspathXmlApplicationContext appContext : childs) {
        appContext.setParent(context);
    }
    context.refresh();
}

您也可以通过使用接口InitializingBean和ApplicationContextAware来进行注释.

编辑:childs是按类型自动连线的,所以Spring将注入作为ClasspathXmlApplicationContext实例的所有bean.

关于获取Spring应用程序上下文如何获取spring上下文的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于java – Maven项目中的每个模块都应该有自己的Spring应用程序上下文吗?、java – Spring应用程序上下文加载顺序、java – 从string加载spring应用程序上下文、java – 使用Web应用程序上下文的Spring上下文层次结构等相关内容,可以在本站寻找。

本文标签: