Spring Framework 源码学习笔记

@CompponmentScan 代替@Bean 分别新增controller,service,dao三个package,并增加响应的类,通过@Controller,@Service,@Repository三个注解将三个类声明为Bean

@Controller

public class PersonController {

}

@Service

public class PersonService {

}

@Repository

public class PersonDao {

}

修改BeanConfig,增加@ComponentScan注解,将com.citi包下面的所有Bean都扫描到BeanConfig这个配置类中,就相当于XML配置文件中有许多bean标签,好处是不用一个个写bean标签,通过一个注解可以扫描所有的Bean

@Configuration

@ComponentScan(basePackages = “com.citi”)

public class BeanConfig {

}

测试IoC容器是否实例化扫描到的Bean,新增一个ComponentScanTest测试类

public class ComponentScanTest {

@Test

public void getBeansByScan(){

ApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);

String[] beanDefinitionNames = context.getBeanDefinitionNames();

for (String beanDefinitionName : beanDefinitionNames) {

System.out.println(beanDefinitionName);

}

}

}

控制台输出如下,自定义的三个类,包括BeanConfi本身都被容器实例化

image.png

entity包中的Person类没有被实例化,是因为Person类上没有添加注解,也即是没有配置bean标签,所以没有注册到容器中,也就没有被实例化,给Person实体类添加一个@Component注解,标识为一个Bean,再次执行测试方法,控制台打印结果如下,Person类被实例化

image.png

@ComponentScan源码

image.png

includeFilters()的使用

image.png

includeFilters()和excludeFilters()返回都是一个Filter数组

FilterType是一个枚举类,默认是ANNOTATION,注解方式

image.png

修改BeanConfig代码,增加includeFilters(),只扫描com.citi包下面的@Controller,@Service注解标识的Bean,一定不要忘记useDefaultFilters = false

@Configuration

@ComponentScan(basePackages = “com.citi”,

includeFilters = {

@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class, Service.cla

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值