聊聊spring之贯穿全局的重要对象BeanDefinition
2020-01-09 16:04:56来源:博客园 阅读 ()
聊聊spring之贯穿全局的重要对象BeanDefinition
BeanDefinition 在 spring 中贯穿始终,spring 要根据 BeanDefinition 对象来实 例化 bean,只要把解析的标签,扫描的注解类封装成 BeanDefinition 对象,spring 才能实例化 bean beanDefinition 实现类 ChildBeanDefinition, GenericBeanDefinition, RootBeanDefinition ChildBeanDefinition ChildBeanDefinition 是一种 bean definition,它可以继承它父类的设置,即 ChildBeanDefinition 对 RootBeanDefinition 有一定的依赖关系。 ChildBeanDefinition 从父类继承构造参数值,属性值并可以重写父类的方法,同 时也可以增加新的属性或者方法。(类同于 java 类的继承关系)。若指定初始化方 法,销毁方法或者静态工厂方法,ChildBeanDefinition 将重写相应父类的设置。 depends on,autowire mode,dependency check,sigleton,lazy init 一般由子类 自行设定 GenericBeanDefinition 注意:从 spring 2.5 开始,提供了一个更好的注册 bean definition 类 GenericBeanDefinition,它支持动态定义父依赖,方法是 GenericBeanDefinition.setParentName(java.lang.String),GenericBeanDefinition 可 以有效的替代 ChildBeanDefinition 的绝大分部使用场合。GenericBeanDefinition 是一站式的标准 bean definition,除了具有指定类、可 选的构造参数值和属性参数这些其它 bean definition 一样的特性外,它还具有通 过 parenetName 属性来灵活设置 parent bean definition。 通常, GenericBeanDefinition 用来注册用户可见的 bean definition(可见的 bean definition 意味着可以在该类 bean definition 上定义 post-processor 来对 bean 进行操作,甚至为配置 parent name 做扩展准备)。RootBeanDefinition / ChildBeanDefinition 用来预定义具有 parent/child 关系的 bean definition。 RootBeanDefinition 一个 RootBeanDefinition 定义表明它是一个可合并的 bean definition:即在 spring beanFactory 运行期间,可以返回一个特定的 bean。RootBeanDefinition 可 以作为一个重要的通用的 bean definition 视图。 RootBeanDefinition 用来在配置阶段进行注册 bean definition。然后,从 spring 2.5 后,编写注册 bean definition 有了更好的的方法:GenericBeanDefinition。 GenericBeanDefinition 支持动态定义父类依赖,而非硬编码作为 root bean definition。 GenericBeanDefinition 创建实例 BeanDefinition 中的属性(1)、id:Bean 的唯一标识名。它必须是合法的 XMLID,在整个 XML 文档中唯一。 (2)、name:用来为 id 创建一个或多个别名。它可以是任意的字母符合。多个别名之间用逗号或空格分 开。 (3)、class:用来定义类的全限定名(包名+类名)。只有子类 Bean 不用定义该属性。 (4)、parent:子类 Bean 定义它所引用它的父类 Bean。这时前面的 class 属性失效。子类 Bean 会继承 父类 Bean 的所有属性,子类 Bean 也可以覆盖父类 Bean 的属性。注意:子类 Bean 和父类 Bean 是同一 个 Java 类。 (5)、abstract(默认为”false”):用来定义 Bean 是否为抽象 Bean。它表示这个 Bean 将不会被实 例化,一般用于父类 Bean,因为父类 Bean 主要是供子类 Bean 继承使用。 (7)、lazy-init(默认为“default”):用来定义这个 Bean 是否实现懒初始化。如果为“true”,它将 在 BeanFactory 启动时初始化所有的 SingletonBean。反之,如果为“false”,它只在 Bean 请求时才开 始创建 SingletonBean。 (8)、autowire(自动装配,默认为“default”):它定义了 Bean 的自动装载方式。 1、“no”:不使用自动装配功能。2、“byName”:通过 Bean 的属性名实现自动装配。 3、“byType”:通过 Bean 的类型实现自动装配。 4、“constructor”:类似于 byType,但它是用于构造函数的参数的自动组装。 5、“autodetect”:通过 Bean 类的反省机制(introspection)决定是使用“constructor” 还是使用“byType”。 (10)、depends-on(依赖对象):这个 Bean 在初始化时依赖的对象,这个对象会在这个 Bean 初始 化之前创建。 (11)、init-method:用来定义 Bean 的初始化方法,它会在 Bean 组装之后调用。它必须是一个无参数 的方法。 (12)、destroy-method:用来定义 Bean 的销毁方法,它在 BeanFactory 关闭时调用。同样,它也必 须是一个无参数的方法。它只能应用于 singletonBean。 (13)、factory-method:定义创建该 Bean 对象的工厂方法。它用于下面的“factory-bean”,表示 这个 Bean 是通过工厂方法创建。此时,“class”属性失效。 (14)、factory-bean:定义创建该 Bean 对象的工厂类。如果使用了“factory-bean”则“class”属性 失效。 (15)、autowire-candidate:采用 xml 格式配置 bean 时,将<bean/>元素的 autowire-candidate 属性设置为 false,这样容器在查找自动装配对象时,将不考虑该 bean,即它不会被考虑作为其它 bean 自动装配的候选者,但是该 bean 本身还是可以使用自动装配来注入其它 bean 的。 (16)、MutablePropertyValues:用于封装<property>标签的信息,其实类里面就是有一个 list,list 里面是 PropertyValue 对象,PropertyValue 就是一个 name 和 value 属性,用于封装<property>标签 的名称和值信息 (17)、ConstructorArgumentValues:用于封装<constructor-arg>标签的信息,其实类里面就是有 一个 map,map 中用构造函数的参数顺序作为 key,值作为 value 存储到 map 中 (18)、MethodOverrides:用于封装 lookup-method 和 replaced-method 标签的信息,同样的类里 面有一个 Set 对象添加 LookupOverride 对象和 ReplaceOverride 对象
原文链接:https://www.cnblogs.com/haoranzhengqi/p/12169691.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:你对Java泛型的理解够深入吗?
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash