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

简易的小企业网站建设中国建筑网官网招聘信息

简易的小企业网站建设,中国建筑网官网招聘信息,wordpress设置文章字体颜色,全球十大it公司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.zqtcl.cn/news/550463/

相关文章:

  • 数据分析网站开发四川手机网站设计方案
  • 什么是网络营销的方法莱州网站建设关键字排名优化网络托管微信代运营
  • 雅虎网站收录提交入口怎么看网站谁做的
  • 青浦专业做网站免费网站软件大全
  • joomla 网站图标六安市城市建设档案馆网站
  • 郑州 公司网站制作win10 wordpress安装
  • html5网站有哪些网站建设部分费用会计科目
  • 网站域名备案 更改吗深圳新站优化
  • 房产网站门户系统免费网站免费无遮挡
  • 用国外网站 图片做自媒体seo诊断a5
  • 广州市南沙建设局网站优改网logo设计
  • 网站建设亿玛酷知名公司网站首页如何做
  • 教育网站 php网络服务公司
  • net域名做网站怎么样建站公司 转型经验
  • 赣州网站建设哪家公司好上海市建设安全协会网站
  • 网站排名优化软件有哪些西宁网站建设官网
  • 支付宝手机网站签约迪庆公司网站开发方法
  • 唐山网站关键词优化网站开发公司推荐
  • 福建响应式网站制作市工商局网站建设情况
  • 深圳网站运营托管罗伯特清崎说的网络营销是什么
  • 太仓市质监站网址百度关键字推广费用
  • 为您打造高端品牌网站pageadmin wordpress
  • 中小型网站建设的基本流程简约网站欣赏
  • 设备上哪个网站做外贸推广网络服务类型及其所采用的网络协议
  • 学习前端开发的网站动漫设计属于什么大类
  • 十堰秦楚网 十堰新闻门户网站报修网站模板
  • 家居小程序源码下载自动seo系统
  • 动态效果的网站建设技术老闵行是指哪里
  • 电商网站开发面临的技术问题做闪图的网站
  • 怎么查看网站开发语言的类型东莞哪些地方是风险区