这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战
上篇文章没有介绍完,这篇来写个补充,让大家全面的认识这个加载过程,废话不多说,我们马上开始吧。
JpaRepositoriesRegistra
@Import(JpaRepositoriesRegistrar.class),这个顶上还有一个注解,这个是激活这个注解的,我们点进去看下。
这个类的类图如下,稍后我们就提到。
这里指定了注解的类型
这里获取一个扩展,用来限定FactoryBean是JpaRepositoryFactoryBean
接着我们看他的父类
RepositoryBeanDefinitionRegistrarSupport
public abstract class RepositoryBeanDefinitionRegistrarSupport 这里面有个注册Bean定义的方法,这里的扩展就是调用之前提到的代码:
往下走,看到注册方法,点进去
我们可以看到它这里定义了一个builder
之后我们往下走,它开启了个计时,然后从包里把所有的Repositoriy接口取出来,一个一个定义。
我们点进这个方法看下,我们可以看到这个里面取了我们这个Bean的名字进行了一些属性设置:
添加了非常多的属性:
之后是根据这个build,生成了一个Bean名称,设置了一些属性,然后把它添加到definitions里面,就完成了全部操作。
这个Bean定义的方法都是这个接口提供的,这个就和我们前面提到的类图联系起来了。
当然和昨天的也能联系起来了,之后通过JpaRepositoryFactoryBean的 afterPropertiesSet()方法来创建Repository Bean。
是不是很简单,这回知道为啥你一个注解就都生效了吧,我们只需要知道那个注解就行了。