首页 > 代码库 > spring理解一

spring理解一

 spring基本工作原理如下:

 1.查找bean配置文件

 2.加载bean配置文件并解析生成中间表示BeanDefinition

 3.注册beanDefinition

 4.如果是单例或lazy-init=false,则直接生成bean

 

 spring将

 1.查找bean配置文件

 2.加载bean配置文件并解析生成中间表示BeanDefinition

 3.注册beanDefinition

这三部分开,可以提供更多的定制给用户。

 spring将配置文件之类的文件资源抽象成一个Resource,封装了getInputStream,isClose等方法。

 Resource有子类ClasspathResouce及FileSystemResource

 Resouce解决了第一步查找bean配置文件的问题

 

 接着要解决第二步载bean配置文件并解析生成中间表示BeanDefinition。

 spring这个是通过BeanDefinitionReader(接口)去做。

 BeanDefinitionReader有实现XmlBeanDefinitionReader等。

 XmlBeanDefinitionReader有个参数为容器BeanRegistry用于存放解析后的BeanDefinition。

 即BeanDefinitionReader可以分三步完成第二步任务:1.将Resource中的inputStream解析成xml的Dom形式 2.根据Dom,生成BeanDefinition 3.注册到BeanRegistry中

 这里将resource解析成Dom是用另一个类DefaultDocumentLoader去做。解析xml生成BeanDefinition则交给:BeanDefinitionParserDelegate去做。

 注册BeanDefinition就简单了,因为BeanRegitry容器是做为参数进入XmlBeanDefinitionReader的,所以直接调就可以了。


 可以看出spring设计XmlBeanDefinitionReader类时,将这个类的职责分解,并将每一部分任务交给相应的类去做。

 

 例子:

         ClassPathResource res=new ClassPathResource("containerTest.xml"); //定位资源
        DefaultListableBeanFactory factory=new DefaultListableBeanFactory(); //BeanRegistry容器
        XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(factory); //

         int n=reader.loadBeanDefinitions(res); //触发,XmlBeanDefinitionReader加载,解析配置文件,生成BeanDefinition的动作

        B b=(B) factory.getBean("b");