BeanDefinition属性

BeanDefinition属性

BeanDefinition是用来描述一个Bean实例的,包括属性值、构造方法

public interface BeanDefinition extends AttributeAccessorBeanMetadataElement {

   // 单例
   String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;
  // 原型
   String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;
  // 设置模式
  void setScope(String scope);
   String getScope();

   // 描述Bean的角色,通过getRole、setRole
  // ROLE_APPLICATION表示这个Bean是用户自己定义的
   int ROLE_APPLICATION = 0;
  // ROLE_SUPPORT表示这个Bean是某些复杂配置的支撑部分
   int ROLE_SUPPORT = 1;
  // ROLE_INFRASTRUCTURE表示这是Spring内部的Bean
   int ROLE_INFRASTRUCTURE = 2;


   // Modifiable attributes

   // 配置parent名称 <bean parent="">
   void setParentName(String parentName);
   String getParentName();

   // 配置Bean的class全路径 <bean class="">
   void setBeanClassName(String beanClassName);
   String getBeanClassName();

   
   

   // 是否懒加载  <bean lazy-init="">
   void setLazyInit(boolean lazyInit);
   boolean isLazyInit();

   // 配置Bean的依赖对象 <dean depends-on="">
   void setDependsOn(String... dependsOn);
   String[] getDependsOn();

  // 配置Bean是否自动装配 <bean autowire-candidate="">
   void setAutowireCandidate(boolean autowireCandidate);
   boolean isAutowireCandidate();

   // 配置Bean是否为首选的Bean <bean primary="">
   void setPrimary(boolean primary);
   boolean isPrimary();

   // 配置FactoryBean的名字 <bean factory-bean="">
   void setFactoryBeanName(String factoryBeanName);
   String getFactoryBeanName();

   // 配置工厂方法 <bean factory-bean="" factory-method="">
   void setFactoryMethodName(String factoryMethodName);
   String getFactoryMethodName();

   // 返回Bean构造方法的参数值
   ConstructorArgumentValues getConstructorArgumentValues();

   // 获取普通属性的集合
   MutablePropertyValues getPropertyValues();


   // Read-only attributes

   // 是否单例
   boolean isSingleton();
  // 是否原型
   boolean isPrototype();
// 是否抽象
   boolean isAbstract();

   
   int getRole();

   // 获取Bean的描述
   String getDescription();

   // 获取Bean的资源描述
   String getResourceDescription();

   // 如果当前BeanDefinition是一个代理对象,会返回原始的BeanDefinition
   BeanDefinition getOriginatingBeanDefinition();

}

子类

AbstractBeanDefinition

AbstractBeanDefinition是一个抽象类,定义了BeanDefinition中对应的get/set方法的属性

public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor
      implements BeanDefinitionCloneable 
{

   
  // 默认就是单例模式singleton
   public static final String SCOPE_DEFAULT = "";

   
   public static final int AUTOWIRE_NO = AutowireCapableBeanFactory.AUTOWIRE_NO;

  
   public static final int AUTOWIRE_BY_NAME = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;

   
   public static final int AUTOWIRE_BY_TYPE = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE;

   
   public static final int AUTOWIRE_CONSTRUCTOR = AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR;

   

   /**
    * Constant that indicates no dependency check at all.
    * @see #setDependencyCheck
    */

   public static final int DEPENDENCY_CHECK_NONE = 0;

   /**
    * Constant that indicates dependency checking for object references.
    * @see #setDependencyCheck
    */

   public static final int DEPENDENCY_CHECK_OBJECTS = 1;

   /**
    * Constant that indicates dependency checking for "simple" properties.
    * @see #setDependencyCheck
    * @see org.springframework.beans.BeanUtils#isSimpleProperty
    */

   public static final int DEPENDENCY_CHECK_SIMPLE = 2;

   /**
    * Constant that indicates dependency checking for all properties
    * (object references as well as "simple" properties).
    * @see #setDependencyCheck
    */

   public static final int DEPENDENCY_CHECK_ALL = 3;

   /**
    * Constant that indicates the container should attempt to infer the
    * {@link #setDestroyMethodName destroy method name} for a bean as opposed to
    * explicit specification of a method name. The value {@value} is specifically
    * designed to include characters otherwise illegal in a method name, ensuring
    * no possibility of collisions with legitimately named methods having the same
    * name.
    * <p>Currently, the method names detected during destroy method inference
    * are "close" and "shutdown", if present on the specific bean class.
    */

   public static final String INFER_METHOD = "(inferred)";


   private volatile Object beanClass;
// bean的作用域,对应bean标签属性scope
   private String scope = SCOPE_DEFAULT;
// 是否抽象,对应bean标签属性abstract
   private boolean abstractFlag = false;
// 是否延迟加载,对应bean标签属性lazy-init
   private boolean lazyInit = false;
// 自动注入模式,对应bean标签属性autowire
   private int autowireMode = AUTOWIRE_NO;
// 依赖检查,spring3.0中弃用
   private int dependencyCheck = DEPENDENCY_CHECK_NONE;
// 一个bean的实例化依赖于另一个bean的实例化,对应bean标签属性depends-on
   private String[] dependsOn;
// 如果该属性设置为false,容器在进行自动装配对象时不会考虑该bean,但是该bean本身还是可以使用自动装配来注入其他bean的,对应bean标签属性autowire-candidate
   private boolean autowireCandidate = true;
// 自动装配时出现多个bean的候选时,如果primary设置为true,则作为首选,对应bean标签属性primary
   private boolean primary = false;
// 用于记录Qualifier,对应子元素qualifier
   private final Map<String, AutowireCandidateQualifier> qualifiers =
         new LinkedHashMap<String, AutowireCandidateQualifier>(0);
// 允许访问非公开的构造器和方法,通过程序设置,不在xml中配置
   private boolean nonPublicAccessAllowed = true;
// 是否以一种宽松的模式解析构造函数,如果为false,如果spring无法精确地定位某个构造函数的话则抛出异常
   private boolean lenientConstructorResolution = true;
// 记录工厂bean对应的id,对应bean标签属性factory-bean
   private String factoryBeanName;
// 记录工厂bean中生产bean的方法,对应bean标签属性factory-method
   private String factoryMethodName;
// 记录构造函数注入属性,对应bean标签属性contructor-arg
   private ConstructorArgumentValues constructorArgumentValues;
// 普通属性集合
   private MutablePropertyValues propertyValues;
// 方法重写的持有者,记录lookup-method、replaced-method元素
   private MethodOverrides methodOverrides = new MethodOverrides();
// 初始化方法,对应bean标签属性init-method
   private String initMethodName;
// 销毁方法,对应bean标签属性destory-method
   private String destroyMethodName;
// 是否执行init-method,通过程序设置,不在xml中配置
   private boolean enforceInitMethod = true;
// 是否执行destory-method,通过程序设置,不在xml中配置
   private boolean enforceDestroyMethod = true;
// 是否是用户定义的而不是应用程序本身定义的,创建AOP时为true,通过程序设置,不在xml中配置
   private boolean synthetic = false;
// 定义这个bean的角色,ROLE_APPLICATION:用户  ROLE_SUPPORT:某些复杂配置的一部分  ROLE_INFRASTRUCTURE:完全内部使用,与用户无关
   private int role = BeanDefinition.ROLE_APPLICATION;
// bean的描述信息
   private String description;
// bean定义的资源
   private Resource resource;

}
RootBeanDefinition

对应了一般的元素标签

public class RootBeanDefinition extends AbstractBeanDefinition
ChildBeanDefinition

可以让子BeanDefinition定义拥有从父BeanDefinition那里继承配置的能力

public class ChildBeanDefinition extends AbstractBeanDefinition
GenericBeanDefinition

可以动态设置父Bean,同时兼具了RootBeanDefinition和ChildBeanDefinition的功能

public class GenericBeanDefinition extends AbstractBeanDefinition
AnnotatedBeanDefinition

接口,表示注解类型的BeanDefinition,拥有获取元数据和方法元数据的能力

public interface AnnotatedBeanDefinition extends BeanDefinition
AnnotatedGenericBeanDefinition

使用了@Configuration注解的配置类会被解析为AnnotatedGenericBeanDefinition

public class AnnotatedGenericBeanDefinition extends GenericBeanDefinition implements AnnotatedBeanDefinition

https://zhhll.icu/2022/框架/spring/进阶/3.BeanDefinition属性/

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/588635.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240502在WIN11下显示桌面

20240502在WIN11下显示桌面 2024/5/2 15:06 百度&#xff1a;WIN11 状态栏 右键 显示桌面 在WIN10下&#xff0c;可以在状态栏点击右键→“显示桌面”来最小化全部窗口&#xff0c;特别是我打开的浏览器的巨多的窗口&#xff01; 但是在WIN11下&#xff0c;这个【显示桌面】怎…

2024五一杯数学建模B题思路代码文章教学-交通需求规划与可达率问题

交通需求规划与可达率问题 问题总结&#xff1a; 问题一&#xff1a;在一个小型交通网络中&#xff0c;给定的起点和终点之间的交通需求需分配到相应路径上。目标是最大化任意一条路段出现突发状况时的交通需求期望可达率。 问题二&#xff1a;在一个较大的交通网络中&#xff…

Linux-进程调度器

1. 前言 在计算机中&#xff0c;进程的数量远多于cpu的数量&#xff0c;所以就存在&#xff0c;多个进程抢占一个cpu的情况&#xff0c;所以就需要一套规则&#xff0c;决定这些进程被处理的顺序&#xff0c;这就叫做进程调度。 在我的简单理解下&#xff0c;其实就是把进程放…

普乐蛙景区vr体验馆VR游乐场设备身历其境体验

小编给大家推荐一款gao坪效产品【暗黑战车】&#xff0c;一次6人同乘&#xff0c;炫酷外观、强大性能和丰富内容适合各个年龄层客群&#xff0c;紧张刺激的VR体验让玩家沉浸在元宇宙的魅力中&#xff0c;无论是节假日还是平日&#xff0c;景区商场助力门店提高客流量和营收~ ◆…

实验三 .Java 语言继承和多态应用练习 (课内实验)

一、实验目的 本次实验的主要目的是通过查看程序的运行结果及实际编写程序&#xff0c;练习使用 Java 语言的继承特性。 二、实验要求 1. 认真阅读实验内容&#xff0c;完成实验内容所设的题目 2. 能够应用多种编辑环境编写 JAVA 语言源程序 3. 认真体会多态与继承的作用…

B+树详解与实现

B树详解与实现 一、引言二、B树的定义三、B树的插入四、B树的删除五、B树的查找效率六、B树与B树的区别和联系 一、引言 B树是一种树数据结构&#xff0c;通常用于数据库和操作系统的文件系统中。它的特点是能够保持数据稳定有序&#xff0c;其插入与修改拥有较稳定的对数时间…

WebGL/Cesium 大空间相机抖动 RTE(Relative to Eye)实现原理简析

在浏览器中渲染大尺寸 3D 模型&#xff1a;Speckle 处理空间抖动的方法 WebGL/Cesium 大空间相机抖动 RTE(Relative to Eye)实现原理简析 注: 相机空间和视图空间 概念等效混用 1、实现的关键代码 const material new THREE.RawShaderMaterial({uniforms: {cameraPostion: {…

【Qt QML】用CMake管理Qt工程

CMake是一个开源、跨平台的工具系列&#xff0c;用于构建、测试和打包软件。CMake使用简单的独立配置文件来控制软件编译过程。与许多跨平台系统不同&#xff0c;CMake被设计为与本地构建环境结合使用。 下面我们在CMake项目中使用Qt的最基本方法。首先&#xff0c;创建一个基本…

如何解决pycharm创建项目报错 Error occurred when installing package ‘requests‘. Details.

&#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;‘requests’ &#x1f6e0;️ 文章目录 &#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;requests &#x1f6e0;️摘要引言正文&#x1f4d8; **问题分析**&#x1f680; **更换Python版本…

OpenCV 实现重新映射(53)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 实现霍夫圆变换(52) 下一篇 :OpenCV实现仿射变换(54) 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 一个。使用 OpenCV 函数 cv&#xff1a;&#xff1a;remap 实现简…

Java Web 开发 - 掌握拦截器和监听器

目录 深入了解Java Web的拦截器和监听器 拦截器&#xff08;Interceptor&#xff09; 拦截器的使用场景 拦截器实例 思维导图 ​编辑 监听器&#xff08;Listener&#xff09; 监听器的使用场景 监听器类型 监听器实例 思维导图​编辑 总结 深入了解Java Web的拦截器…

C——双向链表

一.链表的概念及结构 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。什么意思呢&#xff1f;意思就是链表在物理结构上不一定是连续的&#xff0c;但在逻辑结构上一定是连续的。链表是由一个一个的节点连…

uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之使用jar包插件

前言 如果你不会编写安卓插件,你可以先看看我之前零基础的文章(uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之零基础编写安卓插件), 我们使用第三方包,jar包编写安卓插件 开始 把依赖包,放到某个模块的/libs目录(myTestPlug/libs) 还要到build…

java-函数式编程-函数对象

定义 什么是合格的函数&#xff1f;无论多少次执行函数&#xff0c;只要输入一样&#xff0c;输出就不会改变 对象方法的简写 其实在类中&#xff0c;我们很多参数中都有一个this&#xff0c;被隐藏传入了 函数也可以作为对象传递&#xff0c;lambda就是很好的例子 函数式接口中…

ROS实操:通信机制的实现

最近闲来无事&#xff0c;打算重温了一下ROS方面的相关知识。先前的学习都是一带而过&#xff0c;发现差不多都忘了&#xff0c;学习的不够深入。因此&#xff0c;在重温的同时&#xff0c;写下了这篇关于ROS架构的学习博客。 上一篇博客的链接为&#xff1a;ROS架构的学习【No…

如何利用有限的数据发表更多的SCI论文?——利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响

原文链接&#xff1a;如何利用有限的数据发表更多的SCI论文&#xff1f;——利用ArcGIS探究环境和生态因子对水体、土壤和大气污染物的影响https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247602528&idx6&snc89e862270fe54239aa4f796af07fb71&chksmfa82…

visio画图基本用法

添加图形 点击上面的箭头 添加一些基本的形状 添加连接点 点击这个 X 按住Ctrl&#xff0c;在想要的位置上添加连接点 更改线条样式 选中线条之后&#xff0c;右键 可以选择箭头样式 添加文本框 visio对象复制到word里面&#xff0c;画布存在大量空白问题 https://blog.…

【C语言】深入了解文件:简明指南

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、文件的概念1.1 文件名:1.2 程序文件和数据文件 二、数据文…

如何利用MCU自动测量单元提高大坝安全监测效率

大坝作为重要的水利基础设施&#xff0c;其安全性直接关系到人民群众的生命财产安全和社会的稳定发展。因此&#xff0c;对大坝进行实时、准确的安全监测至关重要。近年来&#xff0c;随着微控制器单元(MCU)技术的不断发展&#xff0c;其在大坝安全监测领域的应用也越来越广泛。…

数据结构——排序算法分析与总结

一、插入排序 1、直接插入排序 核心思想&#xff1a;把后一个数插入到前面的有序区间&#xff0c;使得整体有序 思路&#xff1a;先取出数组中第一个值&#xff0c;然后再用tmp逐渐取出数组后面的值&#xff0c;与前面的值进行比较&#xff0c;假如我们进行的是升序排序&…
最新文章