如何在spring mvc中读取spring-application-context.xml和AnnotationConfigWebApplicationContext

时间:2013-10-22 15:36:38

标签: spring-mvc app-config web.xml spring-annotations applicationcontext

如果我想从spring-application-context.xml读取bean定义,我会在web.xml文件中执行此操作。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext.xml
    </param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

如果我想通过Java配置类(AnnotationConfigWebApplicationContext)读取bean定义,我会在web.xml中执行此操作

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            org.package.MyConfigAnnotatedClass
        </param-value>
    </init-param>
</servlet>

如何在我的应用程序中同时使用它们。比如从配置xml文件和带注释的类中读取bean。

当我们使用AppConfigAnnotatedClass来实例化/使用其余的bean时,有没有办法在xml文件中加载spring bean。

这不起作用

Xml文件将bean定义为

<bean name="mybean" class="org.somepackage.MyBean"/>

Java Class将资源导入为

@ImportResource(value = {"classpath:some-other-context.xml"})
@Configuration
public class MyConfigAnnotatedClass { 
    @Inject
    MyBean mybean;
} 

但mybean值始终为null,当在mybean上调用方法时,mycourse将给出nullpointerexception。

1 个答案:

答案 0 :(得分:4)

您可以使用

@Configuration课程添加注释
@ImportResource(value = {"classpath:some-other-context.xml"})
@Configuration
public class MyConfigAnnotatedClass { 
    ...
}

让它导入<beans>类型xml上下文。

你可以反过来做同样的事情。您的@Configuration课程也是@Component。如果您的<component-scan>包含其包,则其所有已声明的bean都将添加到上下文中。或者,您可以

<bean name="myAdditionalConfig" class="org.somepackage.MyConfigAnnotatedClass" />

请注意,package不能用作包结构中的名称。