上一次已经明白mybatis 用 mapperfactorybean得到对象,然后交给spring,那这个是怎么交给spring的呢?
研究mybatis公司,是如何把自己产生的对象(代理对象)注入给spring容器的呢??
也就是要弄清楚,spring提供了哪些技术来实现把一个对象注入给spring容器的?
====================================
-
xml 配置<bean>标签=======不行,对象由mybatis实例化,这种方式是spring来实例化
-
把一个接口 交给spring,spring并不知道动态代理产生什么对象,而且产生的对象还要操作数据库,所以不行。
-
-
注解扫描=================不行,对象由mybatis实例化,这种方式是spring来实例化
-
@Bean==============可以,每注入一个bean,就要在配置类里面写很多的方法,很多的@bean,不推荐,mybatis也没有采纳\
-
applicationContext===benfactory===register.... 也没有采用,我觉得应该也会出现很多的 注册语句
-
FactoryBean=====采用,MapperFactoryBean 就实现了FactoryBean接口。
============================================================
Mybatis仍然保留了注入单个的方式 <bean>标签的方式
继承了FactoryBean的类,仍然是bean,也需要生效====xml:无法结局注入接口
=====注解@component 这也不行,写死了,无法动态生成
=====@Bean 理论上可以。但是比较冗余,不推荐。
=====采用BeanDefinition
Class 来描述一个对象, BeanDefinition 来描述一个bean
BeanDefinition里面包含很多属性,比如scope是单例还是原型啊什么的一大堆。
而且BeanDefinition的种类也很多。
Java文件通过类加载器加载到JVM中后变成Class,当spring启动之后
:
判断规则,符合就实例化为BeanDefinition
把类变成BeanDefinition,然后变成一个对象,把对象保存着。