spring配置文件的一些说明

1、一些Spring标签的说明

<context:annotation-config />

作用:

向 Spring 容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor 这 4 个BeanPostProcessor,注册这4个BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解

例如:

如果你想使用@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessorBean,传统声明方式如下:<bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor "/> 

如果想使用@Resource 、@PostConstruct、@PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor

如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean

如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。同样,传统的声明方式如 下:<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>一般来说,这些注解我们还是比较常用,尤其是Antowired的注解,在自动注入的时候更是经常使用,所以如果总是需要按照传统的方式一条一条 配置显得有些繁琐和没有必要,于是spring给我们提供<context:annotation-config/>的简化配置方式,自动帮 你完成声明。

不过,我们使用注解一般都会配置扫描包路径选项<context:component-scan base-package="XX.XX"/>该配置项其实也包含了自动注入上述processor的功能,因此当使用<context:component-scan />后,就可以将<context:annotation-config />移除了,

也就是说<context:component-scan base-package="XX.XX"/>标签是包含<context:annotation-config />标签

<context:component-scan base-package="XX.XX"/>

    Spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component、@Repository、@Service、@Controller等注解的类,把这些类注册为bean

    <context:component-scan base-package="com.highrace.console.controller" use-default-filters="false">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <context:component-scan/>提供两个子标签:<context:include-filter/>和<context:exclude-filter/>各代表引入和排除过滤。

    use-default-filters属性,默认是true这就意味着会扫描指定包下的全部的对应注解,这种扫描的粒度有点太大,如果你只想扫描指定包下面的Controller,该怎么办?

    此时配置<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />并将 use-default-filters属性设置为false(如果设置为false,context:include-filter标签是无效的)

    这样就只扫描base-package指定下的有@Controller下的java类,并注册为bean。当然上面的base-package="com.highrace.console.controller"这样配置已经无机会再扫描其它注解,这样的配置是不是显得冗余了呢?如果该包下不仅仅只有@Controller标签的java类呢?

2、一些Spring注解的说明

Spring2.5引入更多典型化注解(stereotype annotations):@Component、@Service和@Controller,@Component是所有受Spring管理组件的通用形式,而@Repository、@Service和@Controller则是@Component的细化,用来表示更具体的用例,

例如:分别对应了持久化层、服务层和表现层,也就是说你能用@Component来注解你的组件类,但如果用@Repository、@Service或@Controller来注解他们,你的类也许能更好的被工具处理,或与切面进行关联。

例如:这些典型化注解可以成为理想的切入点目标,当然在Spring Framework以后的版本中,@Repository、@Service和@Controller也许还能携带更多语义,如此一来,如果你正在考虑服务层中是该用@Component还是@Service,

那@Service显然是更好的选择,同样就像前面说的那样,@Repository已经能在持久化层中进行异常转换时被作为标记使用了。


你可能感兴趣的:(spring配置文件的一些说明)