Spring之底层架构核心概念-BeanDefinition

news/2024/11/19 23:34:49/

目录

  • 1.什么是BeanDefinition?
  • 2.如何生成BeanDefinition?
    • 2.1. @Component
    • 2.1. bean标签
    • 2.3. @Bean注解
    • 2.4. AbstractBeanDefinition
    • 2.5. 利用BeanDefinition 读取器-解析类
    • 2.6. XmlBeanDefinitionReader - 解析 xml文件
    • 2.7. ClassPathBeanDefinitionScanner 扫描生成 BeanDefinition
  • 3.总结

1.什么是BeanDefinition?

BeanDefinition可以理解为bean的定义,包括: Bean 的类名 Bean的父类 Bean是否为懒加载
bean是否可以自动注入 Bean的 作用域、自动绑定模式、生命周期回调、初始方法、销毁方法等 Bean
之间的依赖关系,dependencies 构造参数、属性设置 等等

2.如何生成BeanDefinition?

2.1. @Component

在类上加@Component注解,spring扫描类发现这个类上存在@Component注解,就会把这个类解析成BeanDefinition对象

@Component
public class UserService{
}

2.1. bean标签

spring.xml文件中加bean标签

<bean class= "com.xxx.Service.Uservice" id= "userService" init-method ="xx" lazy-init="true"/>

2.3. @Bean注解

@Bean
Public UserService userService{return new Uservice();
}

2.4. AbstractBeanDefinition

AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(AppConfig.class);
AbstractBeanDefinition beanDefinition=BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
beanDefinition.setBeanClass(UserService.class);
beanDefinition.setScope("prototype");
context.registerBeanDefinition("userService",beanDefinition);

2.5. 利用BeanDefinition 读取器-解析类

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(context);
annotatedBeanDefinitionReader.register(User.class);
System.out.println(context.getBean("user"));

打印:
com.zjy.service.User@68bbe345

2.6. XmlBeanDefinitionReader - 解析 xml文件

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(context);xmlBeanDefinitionReader.loadBeanDefinitions("spring.xml");System.out.println(context.getBean("user"));

打印:
com.zjy.service.User@45820e51

在这里插入图片描述

i =1 表示只解析出来一个

2.7. ClassPathBeanDefinitionScanner 扫描生成 BeanDefinition

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.refresh();
ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(context);
int i =  scanner.scan("com.zjy");
System.out.println(context.getBean("userService"));
@Component
public class UserService {}

扫描com.zjy 这个路径,发现UserService 上有@Component 注解,就把它注册成bean放到BeanDefinition 中

打印:
com.zjy.service.UserService@5bb21b69

3.总结

好记性不如烂笔头,知道不如做到。


http://www.ppmy.cn/news/5624.html

相关文章

Centos7下安装Nginx及配置SSL

文章目录1.官网下载Nginx2.安装依赖包3.安装Nginx4.启动Nginx5.防火墙放开端口6.Nginx的SSL模块安装7.SSL证书准备8.Nginx配置SSL1.官网下载Nginx ​ 去官网下载需要的nginx压缩包&#xff0c;地址&#xff1a;http://nginx.org/en/download.html&#xff0c;此处下载最新稳定…

Promise(三) promise自定义封装25-35

1.初始结构搭建 2.resolve和reject结构搭建 3.throw抛出异常改变状态 4.promise对象状态只能修改一次 5.then方法执行回调 6.指定多个回调的实现 7.同步修改状态then方法结果返回 8.异步修改状态then方法结果返回 9.then方法完善与优化 10.catch方法——异常穿透与值管…

HTML期末作业,基于html实现中国脸谱传统文化网站设计(5个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【浅学Linux】信号产生的4中方式

文章目录一&#xff1a;通过终端按键产生信号二&#xff1a;调用系统函数向进程发信号三&#xff1a;由软件条件产生信号四&#xff1a;硬件异常产生信号总结一&#xff1a;通过终端按键产生信号 比如用户输入命令&#xff0c;在Shell下启动一个前台进程。 用户按Ctrl C&…

leetcode 337 打家劫舍III

题目 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直…

【C++入门基础(上)】

Cross the stars over the moon to meet your better-self. 目录 1 命名空间 1.1 命名空间定义 1.2 命名空间使用 1.2.1 加命名空间名称及作用域限定符 1.2.2 使用using将命名空间中成员引入 1.2.3 使用using namespace 命名空间名称引入 2 C输入&&输出 3 缺省参数…

Redis集群的三种方式详解(附优缺点及原理区别)

Redis提供了三种集群方式&#xff0c;下面我重点详解Redis三种集群方式的原理及优缺点等区别mikechen 目录 Redis主从复制模式Redis哨兵模式Redis集群模式 Redis主从复制模式 1.Redis主从复制定义 主从模式是三种模式中最简单的&#xff0c;主从模式指的是使用一个Redis实例…

【Java枚举类与注解】——一篇文章读懂枚举类与注解

文章目录2.枚举2.1概述2.2定义格式2.3枚举的特点2.4枚举的方法3.注解3.1概述3.2自定义注解3.3 元注解2.枚举 2.1概述 为了间接的表示一些固定的值&#xff0c;Java就给我们提供了枚举&#xff0c;是指将变量的值一一列出来&#xff0c;变量的值只限于列举出来的值的范围内。 …