Spring里component-scan的工作原理_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Spring里component-scan的工作原理

Spring里component-scan的工作原理

 2021/3/16 12:48:59  JerryWang_SAP  程序员俱乐部  我要评论(0)
  • 摘要:InSpringconfigurationxmlfile,wecandefineapackagefortagcomponent-scan,whichtellsSpringframeworktosearchallclasseswithinthisspecifiedpackage,tolookforthoseclasseswhichareannotatedwith@Namedor@Component
  • 标签:工作 can Spring

In Spring configuration xml file, we can define a package for tag component-scan, which tells Spring framework to search all classes within this specified package, to look for those classes which are annotated with @Named or @Component.

?

?

I am very curious about how Spring framework achieves this scan, so I have made some debugging to figure it out.

In this blog?How to find the exact location where bean configuration file is parsed in Spring framework?I have already found the location where the xml configuration file is parsed by Spring framework, so I can directly set breakpoint in found source code. Here the package to be scanned is parsed from xml file:

?

?

And the actual scan is performed in line 87:

?

?

Here all classes within the specified package and its children packages are extracted as resource, now I have 7 resources as candidates for scan which makes sense since I have totally 7 classes in the package:

?

?

The evaluation to check whether the class has qualified annotation is done in this method:

?

?

If the scanned class has at least one annotation ( the annotation written on class is stored in metsadataReader ) which resides in this.includeFilters, then it is considered as a candidate.

?

?

By inspecting content of this.includeFilters, we can know that Spring framework considers @Component and @Named as qualified annotation for automatic component scan logic.

?

?

Back to my example, since my bean class has @named annotated,

?

?

In the runtime, this annotation written in class source code is extracted via reflection, and checked against Spring framework pre-defined annotation set. Here below is how my bean class evaluated as candidate, since it has @Named annotation.

?

?

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

发表评论
用户名: 匿名