@ComponentScan介绍
打开@ComponentScan源码。
@ComponentScan注解是从Spring的3.1版本开始提供的。
@ComponentScan注解最核心的功能就是Spring IOC容器在刷服务器托管网新的时候会扫描对应包下标注了@Component注解、@Configuration注解、@Repository注解、@Service注解和@Controller等等注解的类,生成扫描到的类的Bean定义信息,整体流程与注册ConfigurationClassPostProcessor类的Bean定义信息的流程基本一致,最终都会将其保存到BeanFactory中的beanDefinitionMap中。
简化源码:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
@AliasFor("basePackages")
String[] value() default {};
@AliasFor("value")
String[] basePackages() default {};
Class>[] basePackageClasses() default {};
Class extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
Class extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;
ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;
String resourcePattern() default ClassPathScanningCandidateComponentProvider.DEFAULT_RESOURCE_PATTERN;
boolean useDefaultFilters() default true;
Filter[] includeFilters() default {};
Filter[] excludeFilters() default {};
boolean lazyInit() default false;
@Retention(RetentionPolicy.RUNTIME)
@Target({})
@interface Filter {
FilterType type() default FilterType.ANNOTATION;
@AliasFor("classes")
Class>[] value() default {};
@AliasFor("value")
Class>[] classes() default {};
String[] pattern() default {};
}
}
属性介绍
@ComponentScan属性介绍
- value:作用同basePackages属性,String[]数组类型,指定要扫描的包名。如果指定了要扫描的包名,则Spring会扫描指定的包及其子包下的所有类。
- basePackages:作用同value属性,String[]数组类型,指定要扫描的包名。如果指定了要扫描的包名,则Spring会扫描指定的包及其子包下的所有类。
- basePackageClasses:Class>[]数组类型,指定要扫描的类的Class对象。
- nameGenerator:Class extends BeanNameGenerator>类型,指定扫描类时,向IOC注入Bean对象时的命名规则。
- scopeResolver:Class extends ScopeMetadataResolver>类型,扫描类时,用于处理并转换符合条件的Bean的作用范围。
- scopedProxy:ScopedProxyMode类型,指定生成Bean对象时的代理方式,默认的代理方法是DEFAULT,也就是不使用代理。关于ScopedProxyMode的更多详细的内容,参见2.1.3节。
- resourcePattern:String类型,用于指定扫描的文件类型,默认是扫描指定包下的
*/*.class
。 - useDefaultFilters:boolean类型,是否自动检测@Component @Repository @Service @Controller注解,默认是true。
- includeFilters:Filter[]数组类型,自定义组件扫描过滤规则,符合过滤规则的类的Bean定义信息会被注册到IOC容器中。includeFilters表示只包含对应的规则,当使用includeFilters()来指定只包含哪些注解标注的类时,需要禁用默认的过滤规则,也就是需要将useDefaultFilters属性设置为false。并且,除了符合过滤规则的类外,Spring内置的如下名称的类的Bean定义信息注册到IOC容器时不受过滤规则限制,如下所示。
- excludeFilters:Filter[]数组类型,自定义组件扫描过滤规则,excludeFilters表示排除使用对应的规则,符合过滤规则的类的Bean定义信息不会被注册到IOC容器中。
- lazyInit:boolean类型,从Spring4.1版本开始提供,表示Spring扫描组件服务器托管网时是否采用懒加载 ,默认false,表示不开启懒加载。
@Filter注解属性介绍
- type:FilterType类型,表示过滤规则的类型。关于FilterType的更多详细的内容,参见2.1.4节。
- value:Class>[]数组类型,过滤符合规则的类,作用同classes属性。
- classes:Class>[]数组类型,过滤符合规则的类,作用同value属性。
- pattern:如果FilterType取值为ASPECTJ,则此属性表示ASPECTJ表达式。
ScopedProxyMode枚举类
ScopedProxyMode枚举类表示Spring指定生成Bean对象时的代理方式。
public enum ScopedProxyMode {
DEFAULT,
NO,
INTERFACES,
TARGET_CLASS
}
- DEFAULT:默认的代理方式,也就是不使用代理,除非在component-scan级别使用了不同的配置。
- NO:不使用代理。
- INTERFACES:基于JDK动态代理实现接口代理对象。
- TARGET_CLASS:基于CGLib动态代理创建类代理对象。
FilterType枚举类源码
public enum FilterType {
ANNOTATION,
ASSIGNABLE_TYPE,
ASPECTJ,
REGEX,
CUSTOM
}
- ANNOTATION:按照注解进行过滤。
- ASSIGNABLE_TYPE:按照给定的类型进行过滤。
- ASPECTJ:按照ASPECTJ表达式进行过滤。
- REGEX:按照正则表达式进行过滤。
- CUSTOM:按照自定义规则进行过滤,使用自定义过滤规则时,自定义的过滤器需要实现org.springframework.core.type.filter.TypeFilter接口。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 【Python百日进阶-Web开发-Peewee】Day280 – SQLite 扩展(五)
文章目录 12.2.11 class TableFunction 12.2.12 ClosureTable 12.2.13 class BaseClosureTable 12.2.11 class TableFunction class TableFuncti…