Spring源码(2)mybatis把对象交给spring

上一次已经明白mybatis 用 mapperfactorybean得到对象,然后交给spring,那这个是怎么交给spring的呢?

研究mybatis公司,是如何把自己产生的对象(代理对象)注入给spring容器的呢??

  也就是要弄清楚,spring提供了哪些技术来实现把一个对象注入给spring容器的?

====================================

  1. xml 配置<bean>标签=======不行,对象由mybatis实例化,这种方式是spring来实例化

    1. 把一个接口 交给spring,spring并不知道动态代理产生什么对象,而且产生的对象还要操作数据库,所以不行。

  2. 注解扫描=================不行,对象由mybatis实例化,这种方式是spring来实例化

  3. @Bean==============可以,每注入一个bean,就要在配置类里面写很多的方法,很多的@bean,不推荐,mybatis也没有采纳\

  4. applicationContext===benfactory===register.... 也没有采用,我觉得应该也会出现很多的 注册语句

  5. FactoryBean=====采用,MapperFactoryBean 就实现了FactoryBean接口。

============================================================

Mybatis仍然保留了注入单个的方式 <bean>标签的方式

继承了FactoryBean的类,仍然是bean,也需要生效====xml:无法结局注入接口

           =====注解@component 这也不行,写死了,无法动态生成

             =====@Bean 理论上可以。但是比较冗余,不推荐。

             =====采用BeanDefinition

Spring源码(2)mybatis把对象交给springSpring源码(2)mybatis把对象交给spring

 

Spring源码(2)mybatis把对象交给spring

 

Class 来描述一个对象,  BeanDefinition 来描述一个bean

 BeanDefinition里面包含很多属性,比如scope是单例还是原型啊什么的一大堆。

而且BeanDefinition的种类也很多。

Java文件通过类加载器加载到JVM中后变成Class,当spring启动之后

判断规则,符合就实例化为BeanDefinition

把类变成BeanDefinition,然后变成一个对象,把对象保存着。

 

上一篇:Spring源码分析(五)推断构造方法


下一篇:Spring(3)-手动注册BeanDefinition