1、几十行代码实现一个聊天室
489 2023-04-03 03:27:30
ClassPathResource resource = new ClassPathResource("bean.xml");DefaultListableBeanFactory factory = new DefaultListableBeanFactory();XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);reader.loadBeanDefinitions(resource);
这几行代码都是什么意义呢
ClassPathResource resource = new ClassPathResource("bean.xml");
根据xml文件创建Resource资源对象,其中ClassPathResource是Resource的子类DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
创建一个BeanFactory, DefaultListableBeanFactory
是BeanFactory的一个子类,是IOC的始祖* XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
创建一个读取器,用于载入BeanDefinition* reader.loadBeanDefinitions(resource);
开始载入和注册bean,完成后放入IOC容器中
为了解决资源定位的问题,Spring提供了2个接口
需要注意的是 Resource 和 ResourceLoader 需要配合使用,比如上面那段代码是合适初始化ResourceLoader呢?我们看看XmlBeanDefinitionReader的 构造方法
public XmlBeanDefinitionReader(BeanDefinitionRegistry registry) { super(registry); }
发现是调用父类的构造方法,继续追踪到 AbstractBeanDefinitionReader
protected AbstractBeanDefinitionReader(BeanDefinitionRegistry registry) { Assert.notNull(registry, "BeanDefinitionRegistry must not be null"); this.registry = registry; // Determine ResourceLoader to use. if (this.registry instanceof ResourceLoader) { this.resourceLoader = (ResourceLoader) this.registry; } else { this.resourceLoader = new PathMatchingResourcePatternResolver(); } // Inherit Environment if possible if (this.registry instanceof EnvironmentCapable) { this.environment = ((EnvironmentCapable) this.registry).getEnvironment(); } else { this.environment = new StandardEnvironment(); } }
如果设置了ResourceLoader,就使用设置的,否则使用PathMathingResourcePatternResolver