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

Spring之【BeanDefinition】

目录

BeanDefinition接口

代码片段

作用

BeanDefinitionRegistry接口

代码片段

作用

RootBeanDefinition实现类

GenericBeanDefinition实现类


BeanDefinition接口

代码片段

public interface BeanDefinition {// ...void setScope(@Nullable String scope);@NullableString getScope();void setLazyInit(boolean lazyInit);boolean isLazyInit();void setDependsOn(@Nullable String... dependsOn);@NullableString[] getDependsOn();boolean isSingleton();boolean isPrototype();boolean isAbstract();// ...
}

作用

存储Bean的定义信息,Spring通过Bean对应的BeanDefinition中的信息来判断该Bean是否单例,是否懒加载,是否抽象,是否依赖于其它的Bean等等

BeanDefinitionRegistry接口

代码片段

public interface BeanDefinitionRegistry extends AliasRegistry {// 往容器中添加BeanDefinitionvoid registerBeanDefinition(String beanName, BeanDefinition beanDefinition)throws BeanDefinitionStoreException;// 删除容器中指定的BeanDefinitionvoid removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;// 获取容器中指定的BeanDefinitionBeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;// 判断容器中是否包含指定的BeanDefinitionboolean containsBeanDefinition(String beanName);// 获取容器中所有BeanDefinition的nameString[] getBeanDefinitionNames();// 统计容器中BeanDefinition的个数int getBeanDefinitionCount();// ...}

作用

提供对Spring容器中BeanDefinition进行操作的方法

RootBeanDefinition实现类

public static Set<BeanDefinitionHolder> registerAnnotationConfigProcessors(BeanDefinitionRegistry registry, @Nullable Object source) {// ...// 这里Spring使用了RootBeanDefinition将内部组件Bean对象的BeanDefinition添加到容器中if (!registry.containsBeanDefinition(CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME)) {RootBeanDefinition def = new RootBeanDefinition(ConfigurationClassPostProcessor.class);def.setSource(source);beanDefs.add(registerPostProcessor(registry, def, CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME));}// ...
}private static BeanDefinitionHolder registerPostProcessor(BeanDefinitionRegistry registry, RootBeanDefinition definition, String beanName) {// ...// 添加BeanDefinition到Spring容器中registry.registerBeanDefinition(beanName, definition);// ...}

GenericBeanDefinition实现类

/*** 普通Java类,没有加任何注解*/
public class Teacher {
}
public class SpringMain {public static void main(String[] args) {// Spring容器DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();// 构建GenericBeanDefinition对象GenericBeanDefinition beanDefinition = new GenericBeanDefinition();beanDefinition.setBeanClass(Teacher.class);// 将GenericBeanDefinition放入Spring容器beanFactory.registerBeanDefinition("teacher", beanDefinition);// 从容器中获取Bean对象Teacher teacherBean = beanFactory.getBean(Teacher.class);// 获取到Bean对象:xxxx.Teacher@279ad2e3System.out.println(teacherBean);}
}

http://www.lryc.cn/news/591191.html

相关文章:

  • 图片画廊浏览(侧重 CSS 网格布局和模态框交互)
  • 在分布式系统中,如何保证缓存与数据库的数据一致性?
  • 分别使用Cypher与python构建neo4j图谱
  • Mysql测试题
  • 网络爬虫的介绍
  • 【前沿技术动态】【AI总结】Spring Boot 4.0 预览版深度解析:云原生时代的新里程碑
  • 比特币技术简史 第三章:区块链技术 - 区块结构、链式结构与工作量证明
  • Spark 之 HashJoin
  • CDSS系统升级“可视化解释-智能反馈-临床语言“三位一体设计架构设计分析
  • (自用)补充说明2
  • 【组件库】VanillaTilt.js使用教程和配置项说明
  • C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
  • 【Python练习】046. 编写一个函数,检查一个数组是否是排序的
  • 算法学习笔记:27.堆排序(生日限定版)——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 【agent实战】基于 LangGraph 实现 Agentic RAG:原理、实战与创新全解
  • Java集合处理库——collection-complete
  • React Native 基础tabBar和自定义tabBar - bottom-tabs
  • React hooks——useMemo
  • Android离线TTS实战——集成espeak-ng实现开箱即用的中文语音播报
  • Flutter:上传图片,选择相机或相册:wechat_assets_picker
  • 玖[9],相机/镜头/光源
  • 2021-07-21 VB窗体求范围质数(Excel复制工作簿)
  • Java使用FastExcel实现模板写入导出(多级表头)
  • 在Anaconda Prompt中安装库【保姆教程】
  • 使用flock单进程启动,仍然有多个同名进程可以同时运行
  • 苹果的机器学习框架将支持英伟达的CUDA平台
  • web后端开发(javaweb第十天)
  • 【后端】Linux系统发布.NetCore项目
  • suricata新增Mysql告警规则处理
  • Zemax坐标断点