本文與BeanDefinitionReader有一定關聯
BeanDefinitionRegistry接口用來注冊BeanDefinition存放到指定的位置,一般情況下,BeanDefinitionRegistry接口的實現類中都會有一個map屬性,調用registerBeanDefinition方法,其實就是將BeanDefinition放到map中,下面是一個實現
public class MyBeanDefinitionRegistry implements BeanDefinitionRegistry {private Map<String, BeanDefinition> bdMap = new HashMap<>();//該方法可用于spring動態注入bean@Overridepublic void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)throws BeanDefinitionStoreException {bdMap.put(beanName, beanDefinition);System.out.println(String.format("調用方法:%s", "registerBeanDefinition"));}@Overridepublic boolean containsBeanDefinition(String beanName) {System.out.println(String.format("調用方法:%s", "containsBeanDefinition"));return bdMap.containsKey(beanName);}// 省略其他抽象方法// 省略其他抽象方法
}
下面是一個main方法
public static void main(String[] args) {// 下面這個類可以理解成也是一個beanDefinitionReaderClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(new MyBeanDefinitionRegistry());scanner.scan("基礎包名");
}
動態注入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);
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态