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的原创文章,请关注公众号"汪子熙":
相关推荐
在Spring框架中,`<context:component-scan/>`元素是核心组件扫描的基石,它允许我们自动检测和注册beans,极大地简化了配置工作。这篇博客将深入探讨这个功能强大的特性,以及如何在实际开发中有效利用它。 一、...
下面将详细介绍<context:component-scan/>标签的使用方式和原理。 一、<context:component-scan/>标签的作用 <context:component-scan/>标签是 Spring 框架中用于组件扫描的核心标签。该标签可以自动检测和加载带...
NULL 博文链接:https://xinglu.iteye.com/blog/1457029
然而,在配置过程中,如果遇到“元素 'context:component-scan' 的前缀 'context' 未绑定”的错误,这意味着Spring无法识别和解析这个元素,因为缺少了对应的命名空间定义。 这个问题的根源在于XML配置文件中没有...
例如,`<context:component-scan>`元素可以自动扫描并注册带有特定注解的bean,极大地简化了代码配置。 总结而言,`spring-context-4.2.xsd`是Spring 4.2版本Context模块的核心配置规范,它定义了Spring XML配置...
例如,`spring-beans.xsd`定义了bean元素,`spring-context.xsd`则定义了与上下文相关的元素,如context:component-scan用于扫描并自动注册bean。 总的来说,Spring框架4.2.4.RELEASE提供了强大的功能,包括依赖...
nested exception is java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are ...
这个文件包含了所有在Spring MVC 4.2版本中可以使用的XML配置元素和属性,例如`<mvc:annotation-driven>`、`<bean>`、`<context:component-scan>`等。这些配置元素允许开发者声明式地配置控制器、视图解析器、转换...
"component-scan-spring"项目很显然是一个示例,用于演示如何在Spring应用中使用组件扫描。下面将详细阐述组件扫描的工作原理、优势以及如何在实际开发中应用。 **组件扫描的概念** 组件扫描(Component Scanning)...
Spring框架是Java开发中不可或缺的一部分,它以其模块化、可扩展性和灵活性著称。在Spring框架中,XML配置文件是...同时,了解这些XSD背后的元素和结构,也有助于深入理解Spring框架的工作原理,从而更好地利用其特性。
<context:component-scan base-package="your.package.name"/> <mvc:annotation-driven/> ``` 3. 创建视图: 在`WEB-INF/views`目录下创建`hello.jsp`,写入"Hello, World!"。 通过以上步骤,我们构建了一个...
2. **XML配置简化**:引入了Namespace,比如 `<context:component-scan>` 和 `<tx:annotation-driven>`,使得XML配置文件更加直观。 3. **AOP改进**:增强了切面编程的能力,支持注解定义切面,如@Transactional,...
《Spring与MyBatis整合详解》 在Java开发领域,Spring框架以其强大的功能和灵活性,成为...通过下载并研究这个包中的内容,开发者可以深入了解Spring和MyBatis如何协同工作,从而在实际项目中更高效地进行数据库操作。
<context:component-scan base-package="Mode"></context:component-scan> //表示在包mode下面的类将扫描带有@Component,@Controller,@Service,@Repository标识符的类并为之注入对象。 据说是因为XML配置太烦锁而...
4. `<context:component-scan>`元素:扫描指定包下所有带有特定注解的类,自动注册为Spring Bean。 5. `<import>`元素:引入其他XML配置文件,方便模块化配置。 三、代码提示与开发效率提升 在IDE中,如IntelliJ ...
其次,`context.xsd`扩展了`beans.xsd`,提供了更多上下文相关的配置,如`<context:component-scan>`用于自动扫描并注册带有特定注解的bean,实现了基于注解的组件发现。此外,`<context:property-placeholder>`则...
在Spring Framework 4.3.4.RELEASE中,XML Schema的使用极大地提高了配置的可读性和可维护性,使得开发者能够更专注于业务逻辑,而不是繁琐的配置工作。同时,Spring团队对Schema的不断优化,确保了新版本的稳定性和...
在这个版本中,Spring对测试模块也做了加强,`<context:component-scan>`可以在测试环境中自动扫描和注册组件,`<test>`标签则用于定义单元测试的配置。 总结来说,Spring Framework 4.2.4.RELEASE的Schema特性...
当在Spring配置文件中加入`<context:component-scan base-package="leot.test"/>`,Spring会扫描指定包(本例中为"leot.test")及其子包下的所有类,查找带有上述注解的类,并将其注册为Spring管理的Bean。...
此外,可以利用Spring的自动扫描功能,通过`<context:component-scan>`标签自动发现并管理包中的bean。 7. **测试**:在IDEA中,可以创建JUnit测试来验证Spring配置的正确性。测试类通常位于`src/test/java`目录下...