主要内容
BeanDefinition:顾名思义,就是类定义信息,包含类的class类型、属性值、方法等信息。
BeanDefinitionRegistry:添加BeanDefinitionRegistry注册表接口,定义注册(存放)beanDefinition的方法。
SingletonBeanRegistry接口、DefaultSingletonBeanRegistry类:定义注册(存放)和获取单例bean的方法。
核心类bean容器:DefaultListableBeanFactory:作为SingletonBeanRegistry和BeanDefinitionRegistry的实现类,具备两者能力,向bean容器中注册BeanDefinition后,使用bean时才会实例化。
仓库分支
仓库分支:bean_definition_and_bean_definition_registry
类图
AbstractBeanFactory用到了模版模式的设计模式,创建了getBean的模版方法,和其他抽象方法。
如下图,模版模式中模版抽象类中的抽象方法,可以根据方法职责分到多个子抽象类,让子类重写属于自己职责的方法,知道了这一点就能更容易看清这里的类之间的关系。
测试
public class UserService {
public String save() {
System.out.println("save_success");
return "save_success";
}
}
public class BeanDefinitionAndBeanDefinitionRegistryTest {
@Test
public void test() {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
BeanDefinition beanDefinition = new BeanDefinition();
beanDefinition.setClazz(UserService.class);
beanFactory.registerBeanDefinition("userService", beanDefinition);
UserService userService = (UserService)beanFactory.getBean("userService") ;
userService.save();
}
}
测试结果
save_success
Process finished with exit code 0