组件扫描配置 [XML方式]

组件扫描配置

这里我们通过两个例子来讲解组件扫描配置:

第一个:

<context:component-scan base-package="com.ffyc.spring" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
  • 我们能看到,组件扫描标签是在context名称空间下面的

  • base-package : 要进行扫描的包

  • use-default-filters : 设置是否进行默认过滤

    • 默认情况下use-default-filter值为true, 那么就是用的默认过滤方式, 也就是扫描base-package包下的所有带@component, @Service, @Controller, @Repository注解的类(也就是默认全扫描), 而我们将use-default-filters属性设置为false之后, 我们就可以使用一个子标签(context名称空间之下的include-filter标签)来定义自定义规则, include-filter是指明要对那些进行扫描
    • 我们能看到我们此时context:include-filter子标签中type为annotation, 而expression为org.springframework.stereotype.Controller, 表示的就是扫描指定包下的org.springframework.stereotype.Controller注解
  • 我们可以很快的做一个测试, 我们试一下是否使用这种方式Spring就不会扫描base-package中的@Service等注解了

    • 创建一个UesrService类:

      package com.ffyc.spring.service;
      
      import org.springframework.stereotype.Service;
      
      @Service
      public class UserService {
      
      }
      
    • 创建一个测试类:

      public void test6(){
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
      
          //获取对应的bean实例并打印
          UserService userService = applicationContext.getBean("userService", UserService.class);
      
          System.out.println(userService);
      
      }
      
      • 这里会报一个异常, 就是因为此时我们的SpringIOC容器并没有创建该UserService对象, 但是你却使用getBean()方法要获取该对象, 异常信息如下:

        org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userService' available
        

第二个:

<context:component-scan base-package="com.ffyc.spring">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
  • 这里我们并没有将use-default-filters属性值设置为false, 也就是使用的是默认的全扫描
  • 这里我们使用到了component-scan标签的另一个子标签exclude-filter, 这个标签表示的是将那些内容去除掉, 这里我们的exclude-filter标签中的type为annotation, expression为org.springframework.stereotype.Controller, 所以就是表示默认扫描base-package的@Service注解, @Component注解, @Repository注解, 但是不扫描@Controller注解
    • 这里我们如果想测试的也可以做一个测试, 先测试是否能扫描到base-package之下的@Service注解, @Component注解, @Repository注解, 然后测试能否扫描到base-package之下的@Controller注解 —> 最终的结果肯定是没有扫描@Controller注解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值