使用注解的好处
自Spring2.5就引入了很多注释类,可以使用注解配置完成大部分XML配置的功能,它可以利用Java反射机制获取类的结构信息,在服务器启动时会自动扫描装配.当一个项目变得越来越大,如果全部采用XML配置的方式,配置文件会变得越来越多越来越庞大,在XML文件与Java文件之间来回切换,就会变得非常繁琐且不利于维护。使用注解的方式,可以有效减少配置的工作, 提高可读性和可维护性。虽然注解的方式相对XML在服务器启动时解读的效率会低一些,但是几乎可以忽略。
在项目中开启注解
要使项目能支持注解并被有效识别,需要开启注解,在XML文件中配置:
<!-- 开启注解 -->
<context:annotation-config />
<!-- 自动扫描组件,定义扫描路径。这里要把web下面的 controller去除,他们是在sk-servlet.xml中配置的,如果不去除会影响事务管理的。-->
<context:component-scan base-package="com.sk">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
在xml配置了这个标签后,spring可以自动去扫描base-package下面或者子孙包下面的java文件,如果扫描到有@Component @Controller@Service@Repository等这些注解的类,则把这些类注册为bean。 如果配置了
<context:component-scan>
标签,就可以不用配置<context:annotation-config>
标签了。在
<context:component-scan>
可以添加use-default-filters,spring配置中的use-default-filters用来指示是否自动扫描带有@Component、@Repository、@Service和@Controller的类。默认为true,即默认以上注解全部扫描。如果设置为false,则只会扫描所配置中指定的注解。如下面就只会扫描带有@Controller注解的:
<context:component-scan base-package="com.sk" use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
- 使用
<context:include-filter/>
与<context:exclude-filter />
子标签来添加需要扫描的注解或者过滤掉某些注解。
<!--指定不扫描@Repository注解-->
<context:component-scan base-package="com.sk" use-default-filters="true">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
<!--指定扫描@Service注解-->
<context:component-scan base-package="com.sk" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>