3

如果我想从 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 类将资源导入为

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

但是 mybean 的值始终为 null,这在 mybean 上调用方法时当然会给出 nullpointerexception。

4

1 回答 1

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不能用作包结构中的名称。

于 2013-10-22T17:12:57.303 回答