当前位置: 首页 > news >正文

餐饮网站源码一个网站有几个快照

餐饮网站源码,一个网站有几个快照,免费站推广网站2022,和嗲囡囡和做的网站ComponentScan注解详解:Spring组件扫描的核心机制 一、ComponentScan注解概述 ComponentScan是Spring框架中的一个核心注解,用于自动扫描和注册指定包及其子包下的Spring组件。它是Spring实现依赖注入和自动装配的基础机制之一。 Retention(Retention…

@ComponentScan注解详解:Spring组件扫描的核心机制

一、@ComponentScan注解概述

@ComponentScan是Spring框架中的一个核心注解,用于自动扫描和注册指定包及其子包下的Spring组件。它是Spring实现依赖注入和自动装配的基础机制之一。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {// 配置参数
}

二、基本使用方式

1. 最简单的使用形式

@Configuration
@ComponentScan
public class AppConfig {// 不指定basePackages时,默认扫描当前配置类所在包及其子包
}

2. 指定扫描的基础包

@Configuration
@ComponentScan(basePackages = "com.example.service")
public class AppConfig {// 只扫描com.example.service包及其子包
}

3. 指定多个基础包

@Configuration
@ComponentScan(basePackages = {"com.example.service", "com.example.dao"})
public class AppConfig {// 扫描多个包
}

4. 通过类指定基础包

@Configuration
@ComponentScan(basePackageClasses = {UserService.class, UserDao.class})
public class AppConfig {// 扫描这些类所在的包及其子包
}

三、高级配置选项

1. 包含/排除特定组件

@Configuration
@ComponentScan(basePackages = "com.example",includeFilters = @Filter(type = FilterType.ANNOTATION, classes = Repository.class),excludeFilters = @Filter(type = FilterType.REGEX, pattern = ".*Test.*")
)
public class AppConfig {// 包含Repository注解的类,排除类名包含Test的类
}

2. 过滤器类型(FilterType)

  • ANNOTATION:基于注解过滤(默认)
  • ASSIGNABLE_TYPE:基于类或接口过滤
  • ASPECTJ:使用AspectJ表达式
  • REGEX:使用正则表达式
  • CUSTOM:自定义过滤器

3. 自定义过滤器

public class MyTypeFilter implements TypeFilter {@Overridepublic boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) {// 自定义过滤逻辑return metadataReader.getClassMetadata().getClassName().contains("Service");}
}@Configuration
@ComponentScan(basePackages = "com.example",includeFilters = @Filter(type = FilterType.CUSTOM, classes = MyTypeFilter.class)
)
public class AppConfig {
}

四、@ComponentScans注解

从Spring 4.3开始,可以使用@ComponentScans来组合多个@ComponentScan

@Configuration
@ComponentScans({@ComponentScan(basePackages = "com.example.service"),@ComponentScan(basePackages = "com.example.dao")
})
public class AppConfig {
}

五、与@SpringBootApplication的关系

在Spring Boot应用中,@SpringBootApplication注解已经包含了@ComponentScan的功能:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {// ...
}

六、常见问题与最佳实践

1. 性能考虑

  • 扫描范围不宜过大,尽量精确指定需要扫描的包
  • 避免重复扫描相同的包

2. 与XML配置的协同工作

可以通过<context:component-scan>在XML中实现相同功能,或与注解配置混合使用

3. 组件扫描的底层机制

Spring通过ClassPathBeanDefinitionScanner类实现组件扫描功能,扫描过程主要包括:

  1. 根据配置确定扫描路径
  2. 使用资源模式解析器查找类文件
  3. 应用包含/排除过滤器
  4. 注册符合条件的Bean定义

七、实际应用示例

1. 多模块项目中的组件扫描

// 主配置类
@Configuration
@ComponentScan(basePackages = {"com.example.module1","com.example.module2"
})
public class MainConfig {
}// 模块专用配置类
@Configuration
@ComponentScan(basePackages = "com.example.module1.service")
public class Module1ServiceConfig {
}

2. 条件化组件扫描

@Configuration
@ComponentScan(basePackages = "com.example",includeFilters = @Filter(type = FilterType.CUSTOM, classes = {ProfileBasedFilter.class}),useDefaultFilters = false
)
@Conditional(DevProfileCondition.class)
public class DevConfig {
}

八、总结

@ComponentScan是Spring框架中实现自动装配的核心机制之一,合理使用可以大大简化Spring应用的配置工作。掌握其各种配置选项和过滤机制,能够帮助我们更灵活地控制Spring容器的组件注册过程,构建更加模块化和可维护的应用程序。

http://www.dtcms.com/a/578557.html

相关文章:

  • Windows Qt打开外部程序
  • 怎么建设商品网站网站建设首选公司
  • 西宁网站建设加盟代理北京高端网站制作公司
  • 微信小程序minium自动化测试SOP
  • 如何做好电子商务网站开发企业网站博客上如何营销
  • 【LeetCode】103. 二叉树的锯齿形层序遍历
  • 车联网终端TBOX车载无线4G网络盒子知识详解
  • 什么网站能免费做公众号封面做一个平面网站的成本
  • 作业11.6
  • 做网站项目流程国外文件传输网站
  • 论文分享 |重新思考3D分割:Unified-Lift——端到端的高斯泼溅场景分割新范式
  • xwiki做的网站邢台同城
  • 网站建设工作台账饲料公司网站建设方案
  • 初识MYSQL —— 内置函数
  • 吉林大学建设工程学院 旧网站国外网站免费dns
  • Windows2019IIS+PHP+MySQL环境搭建教程
  • 安卓14移植以太网framework-connectivity-t 编译问题
  • 河南城乡建设部网站crm客户端
  • 浏阳市住房和城乡建设局的网站个人养老保险缴费标准
  • 服务器 网站建设弹幕播放器 wordpress
  • 酒店行业的网站建设杭州强龙网站建设
  • 响应式网站seo爱站关键词搜索
  • 快速排序算法详解:hoare、挖坑法、lomuto前后指针与非递归实现
  • 攻防世界-Misc-Banmabanma
  • 公司网站建设服务wordpress会员制
  • 启航网站建设做橱窗设计的网站
  • 晶圆厂(Fab)对超净服的穿着如何规范?
  • 河南如何做网站官网开发多少钱一个
  • 【算法详解】二叉树路径总和问题——DFS+回溯完整题解(Java实现)
  • 建设外围彩票网站抛丸机网站怎么做