如何将一个对象存到Spring容器中?
有几种办法?
mybatis用的是什么方法
我们平时用的@Component注解的作用是将一个类存到Spring容器中,而不是将对象存到Spring容器中。将类放到Spring容器中,由Spring容器帮它变成一个对象(bean)进行存放。
下面我用一幅图可能会好理解一些。
这一点在我们自己仿写一个Mybatis的时候可以通过JDK动态代理,将一个接口实例化为一个类,再把类放到Spring容器中去。
第一种方法
通过容器的api context.getBeanFactory().registerSingleton
mybatis不是用这种方法,因为需要手动调用api,这种方法一次只能注入一个,另外开发ssm的时候也没有自己去调用api
第二种方法
@Bean
mybatis也不用这种方法,和第一种方法大同小异
第三种方法
FactoryBean
public class CustomFactoryBean implements FactoryBean{}
1.必须实现spring的接口FactoryBean
2.实现两个方法
3.本身是一个bean
4.返回不同于自身的bean
mybatis使用这种方法,实际上前两种现在也不用。
虽然CustomFactoryBean可以把一个对象注册给Spring,但是需要批量注入dao的情况该怎么解决呢?以及如何把CustomFactoryBean交给spring管理,也就是把类交给Spring管理?(mybatis的特殊需求)
@BEAN不行
@Compenent连一个都无法动态
XML不行,无法批量注入dao
答案是beanDefintion