我在调度程序servlet中配置了组件扫描 的码
<context:component-scan base-package="com.web.rest"
annotation-config="true" scoped-proxy="targetClass" />
<annotation-driven />
此代码正在扫描&#34; com.web.rest&#34;包, 现在我必须使用@ComponentScan注释再扫描一个包
示例:
@Configuration
@ComponentScan(basePackages = {"com.web.utils"})
@Component
public class FileUtil {
}
但@ComponentScan(basePackages = {&#34; com.web.utils&#34;})对我不起作用,它不是扫描&#34; com.web.utils&#34;封装
我们可以在同一个项目中使用注释驱动和xml配置组件扫描吗?
答案 0 :(得分:0)
您可以将注释驱动的配置文件和基于xml的配置文件组合在一起。如果您使用的是Java @Configuration文件,则只需添加@ImportResource注释即可同时加载XML配置文件。以下注释在名为spring-servlet.xml
的Spring XML配置文件中加载到基于注释的Spring ApplicationContext对象中:
@Configuration
@ImportResource("classpath:spring-servlet.xml")
class JConfig { }
确保spring-servlet.xml位于应用程序类路径中。有关详细信息,请参阅http://www.theserverside.com/tip/Combining-Annotation-and-XML-Configurations-in-your-Spring-3-Applications。
然后按如下所示修改web.xml中的调度程序servlet配置:
<servlet>
<servlet-name>spring</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.rest.spring.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
您只需在那里更改或添加两个init-param
标记,其余标记将与以前相同。将contextConfigLocation
的param值作为基于注释的配置java文件所在的包。从基于注释的配置文件导入基于xml的配置文件,如上所示。请参阅http://www.baeldung.com/bootstraping-a-web-application-with-spring-and-java-based-configuration。如果有任何问题,请告诉我。
答案 1 :(得分:0)
您可以在同一个项目中使用注释驱动和 XML 配置组件扫描。但是如果您同时使用两者,则 XML 配置会覆盖注释驱动配置,就像在此处进行组件扫描一样。所以我们应该避免混合,如果不可避免,我们应该减少混合。否则结果有时是不可预测的。以下摘自Java文档(参见第3点)。
以下注释和部署描述符组合 支持:
Java EE应用程序或模块可以与完整的Java EE 6打包在一起 兼容的标准和运行时部署描述符。如果标准 部署描述符已指定metadata-complete属性, 模块中的注释将被忽略。
Java EE应用程序或模块可以使用元数据进行完全注释 由列出的规范定义。注释消除了需要 用于Java EE标准部署描述符。在大多数情况下, 也不需要GlassFish Server部署描述符。
- 醇>
Java EE应用程序或模块可以部分注释 标准部署描述符中的部署信息。的情况下 冲突,部署描述符值取代注释 记录元数据和警告消息。
因此,要在此处解决您的问题,您可以在XML配置文件中添加另一个组件扫描,如下所示:
<context:component-scan base-package="com.web.utils"
annotation-config="true" scoped-proxy="targetClass" />
并从 FileUtil 类中删除以下内容。
@ComponentScan(basePackages = {"com.web.utils"})