当前位置: 首页 > 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.pierceye.com/news/550463/

相关文章:

  • 郑州做网站的论坛山西利用模板建站
  • 网站引流.定期报告系统下载官网
  • 北京网站排名珠海 网页设计
  • 长春火车站防疫政策wordpress调用图片代码
  • 建设论坛网站自学江苏中小企业网站建设
  • 东莞网站建设效果好网站建设制作设计
  • 成华区建设局门户网站wordpress.fr
  • 河北制作网站模板建站公司网站开发流程的认识
  • 天津网站建设有哪些做网站的公司为什么人少了
  • 提供中山精品网站建设建俄语网站哪个公司最好
  • 建设银联官方网站怎样在网站做宣传
  • 网站开发支付宝二维码支付建设网站装配式建筑楼房
  • 湖北系统建站怎么用做网站买一个域名就够了吗
  • 如何做问卷调查网站济南网络公司
  • 纯js做网站Wordpress税
  • 建云科技网站首页阿里云 wordpress 安装
  • 浙江省建设工程协会网站动漫网站的设计与实现
  • wordpress能导出网站吗企业内部网站开发
  • 景观石网站建设方案一 网站开发背景
  • 开发app的平台外贸seo建站
  • 网站界面设计实训报告深圳设计公司办公室
  • 京东网站的公司地址别人网站建设多少钱
  • 如何加快网站打开速度wordpress注册怎样通过邮箱验证码
  • 有关图书网站建设策划书电脑公司网站系统源码
  • 西班牙网站后缀360收录提交入口网址
  • 济宁网站建设工程教育网官网学员登录
  • html5导航网站源码下载wordpress 调用 discuz
  • 住房和城乡建设部网站 投诉有哪些网站可以学做糕点的
  • 电商购物网站m3u8插件 wordpress
  • 河北手机网站制作多少钱wordpress文章头部