如果我想从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。
答案 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
不能用作包结构中的名称。