我使用的学习春春在行动第3版,我在不同的来到filter types
中component scanning
春。
这是可用的列表:
注解-筛选扫描类,以查找那些在类型级别上使用给定注解进行注解的类。在expression属性中指定要扫描的注释。
可分配的-筛选扫描类以查找可分配给expression属性中指定的类型的那些类。
Aspectj-过滤扫描类以查找与expression属性中指定的AspectJ类型表达式相匹配的扫描类。
custom-使用expression属性中指定的org.springframework.core.type.TypeFilter的自定义实现。
regex-筛选扫描类,以查找其类名与expression属性中指定的正则表达式匹配的那些类。
我根据书中给出的示例了解了将过滤器类型用于可分配对象和注释的一些想法。
但是对于其余的过滤器类型,我无法理解如何使用这些类型以及何时需要使用其中一种。您能帮我理解这里的概念吗?
组件扫描告诉Spring递归地查找包中的类,为找到的每个类实例化一个对象,并管理这些对象的生命周期。这些对象称为bean。(这是一个非常粗略的解释; Spring检查范围,创建代理以及执行大量其他操作,但是这些细节与谈论过滤器无关。)
组件扫描过滤器缩小了实例化bean的那些类的范围。
@Component
,并为此使用注释过滤器。Dao
,并为此使用可分配的。com.foo.**.service.*
,然后使用正则表达式。com.foo..service.* && !com.foo..MockService
,而您将为此使用Aspectj。Foo
,则可以创建一个bean ,然后编写一个自定义方法 TypeFilter
来使您可以访问该元数据。从我的亲身经历中,我按照受欢迎程度的高低列出了它们,我猜想,到目前为止annotation
,assignable
它们是最受欢迎的。
更新:所有过滤器均实现为TypeFilter
,它们在其match
方法中查看类元数据的不同部分。例如,RegexPatternTypeFilter
实现正则表达式过滤器,其match
方法类似于
@Override
protected boolean match(ClassMetadata metadata) {
return this.pattern.matcher(metadata.getClassName()).matches();
}
编写自己的自定义 TypeFilter
脚本使您可以使用org.springframework.core.type.ClassMetadata
和org.springframework.core.type.AnnotationMetadata
接口中的方法来确定Spring是否应为具有某些特定元数据的类创建Bean。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句