Spring中将BeanDefinition注册到IOC容器中
-
- <bean name=”…” … />
-
注解:
- @Bean,@Component,@Import
-
命名:
- BeanDefinitionRegistry#registerBeanDefition
-
非命名
- BeanDefinitionReaderUtils#registerWithGeneratedName
- AnnotatedBeanDefinitionReader#register
RumenzA
package com.rumenz; public class RumenzA { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "RumenzA{" + "id='" + id + '/'' + ", name='" + name + '/'' + '}'; } public RumenzA() { System.out.println("RumenzA 无参构造方法"); } }
XMl配置元信息
<bean id="rumena" class="com.rumenz.RumenzA"/>
@Bean,@Component,@Import 注解
package com.rumenz; @Import(DemoApplication.Config.class) public class DemoApplication { public static void main(String[] args) { AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext(); ac.register(DemoApplication.class); ac.refresh(); System.out.println("RumenzA类"+ac.getBeansOfType(RumenzA.class)); System.out.println("Config类"+ac.getBeansOfType(Config.class)); System.out.println("DemoApplication类"+ac.getBeansOfType(DemoApplication.class)); ac.close(); } @Component public static class Config{ @Bean public RumenzA rumenza(){ RumenzA r=new RumenzA(); r.setId("1"); r.setName("入门小站"); return r; } } }
BeanDefinitionRegistry#registerBeanDefinition
BeanDefinitionReaderUtils#registerWithGeneratedName
package com.rumenz; @Import(DemoApplication.Config.class) //1.注解方式 public class DemoApplication { public static void main(String[] args) { AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext(); //ac.register(DemoApplication.class); //1.注解方式 // 2.BeanDefinitionReaderUtils#registerWithGeneratedName,BeanDefinitionRegistry#registerBeanDefinition registryBeanDefinition(ac,"rumenz"); registryBeanDefinition(ac,null); ac.refresh(); System.out.println("RumenzA类"+ac.getBeansOfType(RumenzA.class)); ac.close(); } private static void registryBeanDefinition(BeanDefinitionRegistry reg,String beanName){ BeanDefinitionBuilder builder= BeanDefinitionBuilder.genericBeanDefinition(RumenzA.class); builder.addPropertyValue("id","1").addPropertyValue("name","入门小站"); if(StringUtils.isEmpty(beanName)){ //非命名 BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(),reg); }else{ //命名 reg.registerBeanDefinition(beanName,builder.getBeanDefinition()); } } @Component //1.注解方式 public static class Config{ @Bean //1.注解方式 public RumenzA rumenza(){ RumenzA r=new RumenzA(); r.setId("1"); r.setName("入门小站"); return r; } } }
AnnotatedBeanDefinitionReader#register
- register –>>this.reader.register
- this.reader –>>private final AnnotatedBeanDefinitionReader reader;
AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext(); ac.register(DemoApplication.class);
源码: https://github.com/mifunc/Spr…
原文: https://rumenz.com/rumenbiji/Spring-registerBeanDefinition.html
原文
https://segmentfault.com/a/1190000023031750
本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring中将BeanDefinition注册到IOC容器中