博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring-BeanDefinitionRegistry
阅读量:4303 次
发布时间:2019-05-27

本文共 1459 字,大约阅读时间需要 4 分钟。

作用:ZJ:BeanDefinition实例化之后,会有"一个东西"将这些实例化的BeanDefinition交给BeanDefinitionRegistry并调用下面两个方法

1.下面我自己定义了一个BeanDefinitionRegistry

public class MyBeanDefinitionRegistry implements BeanDefinitionRegistry {	//该方法可用于动态注入bean	@Override	public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)			throws BeanDefinitionStoreException {		System.out.println(String.format("调用方法:%s", "registerBeanDefinition"));	}	@Override	public boolean containsBeanDefinition(String beanName) {		System.out.println(String.format("调用方法:%s", "containsBeanDefinition"));		return false;	}

2.下面是一个main方法

public static void main(String[] args) {		ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(new MyBeanDefinitionRegistry());		scanner.scan("基础包名");	}

main方法中的scanner就是我上面所说的"一个东西",我猜应该有很多类似这样的类,它会扫描基础包名下面所有有@Component注解的类及其派生类,然后将这些类封装成BeanDefinition,每生成一个BeanDefinition,都会再将这个BeanDefinition交给我自己定义的MyBeanDefinitionRegistry类,然后调用containsBeanDefinition方法,再调用registerBeanDefinition注册,至少ClassPathBeanDefinitionScanner应该,我说的是应该,这样子

3.动态注入bean

public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.refresh(); // 可以在我们的系统里获取到ApplicationContext // 然后转换成BeanDefinitionRegistry即可动态注入 BeanDefinitionRegistry bdr = (BeanDefinitionRegistry) ctx; bdr.registerBeanDefinition("abc", new RootBeanDefinition(Abc.class)); Abc cb = ctx.getBean(Abc.class); System.out.println(cb);}

转载地址:http://fxhws.baihongyu.com/

你可能感兴趣的文章
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
linux安装docker
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>