如何让各种注解 @Controller ,@Repository,@Service等生效?

必须开启classpath扫描,才可以自动注册这些被标记注解的元素到web application context

必须在Spring 上下文配置文件中用<context: component-scan> ,比如:

  1. <context:component-scan base-package="chapter08.code.listing"/> 

base-package可以指定多个,彼此用逗号分隔,于是所有在这些包下面(加上这些包的子包下面)的并且有注解的都会被认为是Spring的组件。

 

被扫描的base-package可以用通配符,比如下面例子就是把com.bleum.canton.<模块名>.[service|dao|webservice] 下面的所有被标注的组件都认为是Spring组件。

  1. <context:component-scan base-package="com.bleum.canton.*.service" /> 
  2. <context:component-scan base-package="com.bleum.canton.*.dao" /> 
  3. <context:component-scan base-package="com.bleum.canton.*.webservice" /> 

被扫描的包如果要加入或者排除某些component,可以用include-filter或者exclude-filter,比如下面例子是吧org.example包下面的所有注解都认为Spring组件,但是所有标注为@Repository的组件被排除,而引入所有Stub下的Repository.

  1. <beans ...> 
  2.  
  3.      <context:component-scan base-package="org.example"> 
  4.         <context:include-filter type="regex" expression=".*Stub.*Repository"/> 
  5.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> 
  6.      </context:component-scan> 
  7.  
  8. </beans>