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

九江网站开发游戏网站开发具备

九江网站开发,游戏网站开发具备,萧山网站建设争锋网络,西安seo排名外包Spring类路径Bean定义信息扫描 1. ClassPathBeanDefinitionScanner作用2. 类声明3. 属性4. 构造器5. 扫描方法6. 真正扫描方法7. postProcessBeanDefinition8. 注册bean定义 1. ClassPathBeanDefinitionScanner作用 扫描类路径下的类注册为bean定义。2. 类声明 public class … Spring类路径Bean定义信息扫描 1. ClassPathBeanDefinitionScanner作用2. 类声明3. 属性4. 构造器5. 扫描方法6. 真正扫描方法7. postProcessBeanDefinition8. 注册bean定义 1. ClassPathBeanDefinitionScanner作用 扫描类路径下的类注册为bean定义。2. 类声明 public class ClassPathBeanDefinitionScanner extends ClassPathScanningCandidateComponentProvider /**类名就是扫描类路径下bena定义。继承自类路径扫描候选组件提供器类路径扫描候选组件提供器的作用扫描类路径下的时候使用过滤器是否考虑作为候选者作为待注入的bean定义。 **/3. 属性 // beanDefinition注册器private final BeanDefinitionRegistry registry;// 存储默认的BeanDefinition属性值如作用域scope、懒加载lazy initialization等设置。private BeanDefinitionDefaults beanDefinitionDefaults new BeanDefinitionDefaults();// 定义了一组字符串模式用于决定哪些被扫描到的类应该被认为是自动装配候选者autowire // candidates。如果一个类的全限定名匹配这些模式之一那么它将被视为可以进行自动装配的bean。private String[] autowireCandidatePatterns;// Bean名称生成器策略默认是AnnotationBeanNameGenerator实例它根据类上的注解或类名来生// 成bean的名称.在扫描和注册bean的过程中会用到这个策略来生成唯一的bean名称。private BeanNameGenerator beanNameGenerator AnnotationBeanNameGenerator.INSTANCE;// 指定了作用域元数据解析器默认使用AnnotationScopeMetadataResolver它根据类上的注解// 如Component、Service等来确定bean的作用域例如singleton或prototype。private ScopeMetadataResolver scopeMetadataResolver new AnnotationScopeMetadataResolver();// 如果为true表示在扫描过程中不仅会处理带有特定注解如Component、Repository、Service、// Controller等的类还会处理类上的注解配置信息如Autowired、Value等。如果设置为// false则只扫描并注册类本身作为bean而不处理注解驱动的配置。private boolean includeAnnotationConfig true;4. 构造器 /*单个参数的构造器: 传入注册器 */ public ClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry) {// 调用本地构造器: 注册器使用默认过滤器this(registry, true); }/*双参数的构造器: 传入注册器, 是否使用默认过滤器 */ public ClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters) {// 调用本地构造器 注册器, 是否使用默认的过滤器获取或创建环境this(registry, useDefaultFilters, getOrCreateEnvironment(registry)); }public ClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters,Environment environment) {// 调用本地构造器注册器,过滤器环境资源加载器nullthis(registry, useDefaultFilters, environment,(registry instanceof ResourceLoader ? (ResourceLoader) registry : null)); }// 最终的构造器: 注册器、默认过滤器、环境、资源加载器 public ClassPathBeanDefinitionScanner(BeanDefinitionRegistry registry, boolean useDefaultFilters,Environment environment, Nullable ResourceLoader resourceLoader) {Assert.notNull(registry, BeanDefinitionRegistry must not be null);this.registry registry;// 设置值if (useDefaultFilters) {registerDefaultFilters();}setEnvironment(environment);setResourceLoader(resourceLoader); }5. 扫描方法 // 扫描指定包的类 public int scan(String... basePackages) {// 获取当前注册器中bean定义的数量int beanCountAtScanStart this.registry.getBeanDefinitionCount();// 去扫描指定的包doScan(basePackages);// Register annotation config processors, if necessary.if (this.includeAnnotationConfig) {AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);}// 返回注册后-之前已注册数量的差return (this.registry.getBeanDefinitionCount() - beanCountAtScanStart); }6. 真正扫描方法 protected SetBeanDefinitionHolder doScan(String... basePackages) {Assert.notEmpty(basePackages, At least one base package must be specified);SetBeanDefinitionHolder beanDefinitions new LinkedHashSet();for (String basePackage : basePackages) {// 查找候选组件SetBeanDefinition candidates findCandidateComponents(basePackage);for (BeanDefinition candidate : candidates) {// 获取作用域ScopeMetadata scopeMetadata this.scopeMetadataResolver.resolveScopeMetadata(candidate);// 设置作用域candidate.setScope(scopeMetadata.getScopeName());// 按照beanName生成策略获取到bean名称String beanName this.beanNameGenerator.generateBeanName(candidate, this.registry);// 如果是抽象BeanDefinitionif (candidate instanceof AbstractBeanDefinition) {postProcessBeanDefinition((AbstractBeanDefinition) candidate, beanName);}// 如果是注解BeanDefinitionif (candidate instanceof AnnotatedBeanDefinition) {AnnotationConfigUtils.processCommonDefinitionAnnotations((AnnotatedBeanDefinition) candidate);}// 检查给定的候选BeanDefinition确定相应的BeanDefinition是否需要注册或者是否和// 已经存在的定义发生了冲突。if (checkCandidate(beanName, candidate)) {BeanDefinitionHolder definitionHolder new BeanDefinitionHolder(candidate, beanName);definitionHolder AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);beanDefinitions.add(definitionHolder);registerBeanDefinition(definitionHolder, this.registry);}} }补充一下 AbstractBeanDefinition、AnnotatedBeanDefinition都是spring框架中定义和处理BeanDefinition的类他们在SpringIOC容器的核心机制中有重要的地位。 1. AbstractBeanDefinition: 是个抽象类实现了 BeanDefinition 接口为BeanDefinition提供了一些通用的方法和属性。提供了BeanDefinition的基本结构如作用域scope,初始化方法销毁方法、依赖项管理等元数据信息的存储和操作子类有RootBeanDefinition、GenericBeanDefinition 2. AnnotatedBeanDefinition 该类封装了一个被注解标注的类的信息并能够从类上的注解提取Bean的元数据如作用域、生命周期回调方法等。在基于注解的配置环境下Spring会使用 AnnotatedBeanDefinitionReader 或者 ClassPathBeanDefinitionScanner 等工具将带有注解的类转换为 AnnotatedBeanDefinition 对象并注册到IoC容器中。 7. postProcessBeanDefinition protected void postProcessBeanDefinition(AbstractBeanDefinition beanDefinition, String beanName) {beanDefinition.applyDefaults(this.beanDefinitionDefaults);if (this.autowireCandidatePatterns ! null) {beanDefinition.setAutowireCandidate(PatternMatchUtils.simpleMatch(this.autowireCandidatePatterns, beanName));} }8. 注册bean定义 protected void registerBeanDefinition(BeanDefinitionHolder definitionHolder, BeanDefinitionRegistry registry) {BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, registry); }
http://www.hkea.cn/news/14362869/

相关文章:

  • 网站开发培训班多少报名费网上国网app下载交电费
  • 个人博客网站需要备案吗秦皇岛平台公司
  • 网站设计遇到的问题淄博网站制作平台形象
  • 关于进一步加强门户网站建设伊犁州建设局网站
  • 无忧企业网站管理系统乡镇医院网站建设
  • 企业门户网站模板html上线wordpress博客页面修改
  • 站长工具爱站网弄几个的网站
  • 郑州微网站制作个人怎么进行网站建设
  • 网站建设技术支持有什么整合营销是做什么的
  • 公司网站建设 意义网站后缀是xyz指得是什么
  • 中山华企立方网站建设公司产品开发流程是经营流程
  • 网站建设教程免费下载长春最新通告今天
  • 相亲网站建设策划方案c2c网站制作
  • 网站模板 phpcms2021网络公司排名
  • 如何建设网站效果好亚马逊购物官网入口
  • 建设一个网站论坛要多少钱seo网站推广的主要目的是什么
  • 中国工程建设标准化协会官方网站2021网络营销成功案例
  • 深圳网站建设知名 乐云践新wordpress 模拟登陆
  • 西宁网站建设公司移动互联网开发学习心得
  • asp网站免费模板下载上海网站建设价
  • 海东商城网站建设南京网站制作公司
  • 百度收录的网站标题 --wordpress缩略图加边框
  • 低价做网站wordpress文章美化
  • 2018网站内容和备案wordpress转手机
  • 网站开发合同适用印花税微站官网
  • wordpress更换域名后网站打不开门窗企业网站建设
  • 学校网站设计的目的网站空间数据库
  • 舆情监测工作要怎么做企业官网优化
  • 雍熙网站建设深圳关键词优化报价
  • 菜鸟网站建设公众号开发信息什么意思