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

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.xdnf.cn/news/15547.html

相关文章:

  • cuda编程笔记(8)--线程束warp
  • 有n棍棍子,棍子i的长度为ai,想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长,若无法组成三角形则输出0。
  • Java List 集合详解:从基础到实战,掌握 Java 列表操作全貌
  • 自定义 django 中间件
  • 深度学习基础 | Softmax 函数原理详解 + Python实现 + 数学公式
  • 前缀和题目:表现良好的最长时间段
  • Leetcode 03 java
  • CKS认证 | Day6 监控、审计和运行时安全 sysdig、falco、审计日志
  • vue3 自定义vant-calendar header/footer/maincontent
  • EXCEL VBA合并当前工作簿的所有工作表sheet
  • Java全栈面试实录:从电商支付到AIGC的深度技术挑战
  • 机器学习:数据清洗与预处理 | Python
  • 控制台输出的JAVA格斗小游戏-面向对象
  • CMake综合学习1: Cmake的模块化设计
  • 我爱学算法之—— 前缀和(下)
  • 【yaml文件格式说明】
  • 18001.QGroundControl操作文档(一)
  • 【测试100问】为什么要做接口测试?
  • 让K线说话!用形态匹配功能透视通达信数据黑洞
  • 【带权的并集查找】 P9235 [蓝桥杯 2023 省 A] 网络稳定性|省选-
  • 小程序性能优化全攻略:提升用户体验的关键策略
  • 每天一个前端小知识 Day 33 - 虚拟列表与长列表性能优化实践(Virtual Scroll)
  • Oracle 关于一些连接故障的总结
  • NumPy 详解
  • 职业发展:把工作“玩”成一场“自我升级”的游戏
  • Web前端性能优化原理与方法
  • 【kubernetes】--安全认证机制
  • xss-labs通关
  • 微服务架构升级:从Dubbo到SpringCloud的技术演进
  • PandaWiki与GitBook深度对比:AI时代的知识管理工具,选谁好?