@import使用 与springboot run方法解析

创建bean的注入规则

ImportBeanDefinitionRegistrar接口,实现该接口用来向容器中注入bean的注入规则,例如按照某一个注解注入,或者注入后进行proxy,等等操作,比如我们可以自定一个注解,创建一个scanner,用来扫描该注解,进行注入到容器中bean。
方法:
实现importbeandefinitionregister接口,registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry){
//annotationMetadata 可以通过attribute方法拿到容器中注解的信息
// 例如:可以拿到EnableAspectJAutoProxy 的注解信息,比如exposed,proxytargetclass 信息
AnnotationAttributes enableAspectJAutoProxy = AnnotationAttributes.fromMap(annotationMetadata.getAnnotationAttributes(EnableAspectJAutoProxy.class.getName(), false));
//创建一个默认的scanner,设置AnnotationTypeFilter ,然后scan,这样在包com.gxn.garden包下使用了@Mapper的类会被注入到容器中。
AnnotationTypeFilter annotationTypeFilter = new AnnotationTypeFilter(Mapper.class);
scanner.addExcludeFilter(annotationTypeFilter);
scanner.scan(“com.gxn.garden”);

}
//声明一个注解。
@interface Mapper{
public String name();
}

springboot的run方法

  1. run里面,可以看到一个createapplicationcontent的方法:
    然后对applicationcontentclass进行判断,如果是web,就加载一个AnnotationConfigServletWebServerApplicationContext,如果是REACTIVE就加载AnnotationConfigReactiveWebServerApplicationContext,,
    然后对该class进行newinstance到容器中。
  2. 然后执行preparedcontent,执行postProcessApplicationContext,logstart 以及对容器的config进行配置,listener加载到容器中,准备初始化。
  3. 然后执行refresh
    this.postProcessBeanFactory(beanFactory);
    this.invokeBeanFactoryPostProcessors(beanFactory);
    this.registerBeanPostProcessors(beanFactory);
    this.initMessageSource();
    this.initApplicationEventMulticaster();
    this.onRefresh();
    this.registerListeners();
    this.finishBeanFactoryInitialization(beanFactory);
    this.finishRefresh();
    4.invokeBeanFactoryPostProcessors 主要对bean的配置做处理,例如扫描configbean, 加载@value 等等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值