spring mvcにおける注釈説明

3468 ワード

ノートスキャン
context:component-scan パッケージスキャン
  package="org.bdp">   
            
      
 
この方式では、controler層をスキャンするだけでなく、@serviceと@repositoryのbeanをスキャンします.この時、いくつかの問題が発生します.これは特にspringmvc+spring+hibernaneなどの集積時に問題が発生しやすいです.
この場合の発生を避けるために、use-default-filters="false"を追加することができます.
すなわち、
package="org.bdp" use-default-filters="false">   
                
        

ソースの表示
protected void registerDefaultFilters() {
this.includeFilters.add(new AnnotationTypeFilter(Component.class));
ClassLoader cl = ClassPathScanningCandidateComponentProvider.class.getClassLoader();

try {
    this.includeFilters.add(new AnnotationTypeFilter(ClassUtils.forName("javax.annotation.ManagedBean", cl), false));
    this.logger.debug("JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning");
} catch (ClassNotFoundException var4) {
    ;
}

try {
    this.includeFilters.add(new AnnotationTypeFilter(ClassUtils.forName("javax.inject.Named", cl), false));
    this.logger.debug("JSR-330 'javax.inject.Named' annotation found and supported for component scanning");
} catch (ClassNotFoundException var3) {
    ;
}}
 
スキャンする時は、デフォルトでcomponent Namedをスキャンします.ManagedBeanなどのコメント
@serviceなどのコメント
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
    String value() default "";
}
 
よく観察できます.@service注は全部@componentです.
原因が見つかりました.解決策はデフォルトのフィルタをオフにすることです.