Spring mvc Spring组件扫描:我们可以使用@componentscan和<;上下文:组件扫描基本包=";com.web.*"/&燃气轮机;在同一个项目中?

Spring mvc Spring组件扫描:我们可以使用@componentscan和<;上下文:组件扫描基本包=";com.web.*"/&燃气轮机;在同一个项目中?,spring-mvc,Spring Mvc,我已经在DispatcherServlet中配置了组件扫描 代码: <context:component-scan base-package="com.web.rest" annotation-config="true" scoped-proxy="targetClass" /> <annotation-driven /> @Configuration @ComponentScan(basePackages = {"com.web.utils"}) @C

我已经在DispatcherServlet中配置了组件扫描 代码:

<context:component-scan base-package="com.web.rest"
        annotation-config="true" scoped-proxy="targetClass" />
<annotation-driven />
@Configuration
@ComponentScan(basePackages = {"com.web.utils"})
@Component
public class FileUtil {
}
但是@ComponentScan(basePackages={“com.web.utils”})对我不起作用,它没有扫描“com.web.utils”包


我们可以在同一个项目中使用注释驱动和xml配置组件扫描吗???

您可以将注释驱动的配置文件和基于xml的配置文件组合在一起。如果您使用的是Java@Configuration文件,那么只需添加@ImportResource注释即可同时加载XML配置文件。以下注释将名为
Spring servlet.XML
的Spring XML配置文件加载到基于注释的Spring ApplicationContext对象中:

@Configuration
@ImportResource("classpath:spring-servlet.xml")
class JConfig { }
确保spring-servlet.xml位于应用程序类路径中。有关更多详细信息,请参阅

然后修改web.xml中的dispatcher 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>
<context:component-scan base-package="com.web.utils"
        annotation-config="true" scoped-proxy="targetClass" />

春天
org.springframework.web.servlet.DispatcherServlet
上下文类
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
上下文配置位置
org.rest.spring.rest
1.
春天
/

您只需在此处更改或添加两个
init param
标记,其余标记将与以前相同。将
contextConfigLocation
的param值作为基于注释的配置java文件所在的包。并从该基于注释的配置文件导入基于xml的配置文件,如上所示。提到如果有任何问题,请告诉我。

您可以将注释驱动的配置文件和基于xml的配置文件组合在一起。如果您使用的是Java@Configuration文件,那么只需添加@ImportResource注释即可同时加载XML配置文件。以下注释将名为
Spring servlet.XML
的Spring XML配置文件加载到基于注释的Spring ApplicationContext对象中:

@Configuration
@ImportResource("classpath:spring-servlet.xml")
class JConfig { }
确保spring-servlet.xml位于应用程序类路径中。有关更多详细信息,请参阅

然后修改web.xml中的dispatcher 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>
<context:component-scan base-package="com.web.utils"
        annotation-config="true" scoped-proxy="targetClass" />

春天
org.springframework.web.servlet.DispatcherServlet
上下文类
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
上下文配置位置
org.rest.spring.rest
1.
春天
/

您只需在此处更改或添加两个
init param
标记,其余标记将与以前相同。将
contextConfigLocation
的param值作为基于注释的配置java文件所在的包。并从该基于注释的配置文件导入基于xml的配置文件,如上所示。提到如果有任何问题,请告诉我。

您可以在同一项目中使用注释驱动和XML配置组件扫描。但是如果您同时使用这两种方法,那么XML配置将覆盖注释驱动的配置,就像它在这里用于组件扫描一样。因此,我们应该避免混合,如果不可避免,我们应该减少混合。否则,结果有时是不可预测的。下面是Java文档的摘录(参见第3点)

下面是注释和部署描述符的组合 支持:

  • JavaEE应用程序或模块可以与完整的JavaEE6打包在一起 兼容的标准和运行时部署描述符。如果标准 部署描述符已指定元数据完成属性, 模块中的注释将被忽略

  • JavaEE应用程序或模块可以使用元数据进行完全注释 由列出的规范定义。注释消除了这种需要 用于JavaEE标准部署描述符。在大多数情况下 GlassFish服务器部署描述符也不需要

  • JavaEE应用程序或模块可以使用一些 标准部署描述符中的部署信息。万一 冲突,部署描述符值将取代带注释的 元数据,并记录一条警告消息

  • 因此,要解决这里的问题,您可以在XML配置文件中添加另一个组件扫描,如下所示:

    <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>
    
    <context:component-scan base-package="com.web.utils"
            annotation-config="true" scoped-proxy="targetClass" />
    

    您可以在同一项目中使用注释驱动和XML配置组件扫描。但是如果您同时使用这两种方法,那么XML配置将覆盖注释驱动的配置,就像它在这里用于组件扫描一样。因此,我们应该避免混合,如果不可避免,我们应该减少混合。否则,结果有时是不可预测的。下面是Java文档的摘录(参见第3点)

    下面是注释和部署描述符的组合 支持:

  • JavaEE应用程序或模块可以与完整的JavaEE6打包在一起 兼容的标准和运行时部署描述符。如果标准 部署描述符已指定元数据完成属性, 模块中的注释将被忽略

  • JavaEE应用程序或模块可以使用元数据进行完全注释 由列出的规范定义。注释消除了这种需要 用于JavaEE标准部署描述符。在大多数情况下 GlassFish服务器部署描述符也不需要

  • JavaEE应用程序或模块可以使用一些 标准部署描述符中的部署信息。万一 冲突,部署描述符值将取代带注释的 元数据和警告消息