spring学习之FactoryBean

spring中有两种类型的bean, 第一种是普通bean, 另一种是工厂bean, 即FactoryBean . 工厂bean和普通bean不同, 其返回的对象不是指定类的实例, 其返回的是该工厂bean的getObject方法返回的对象 . spring内部AOP相关功能, 以及spring和mybatis整合也都使用到FactoryBean .


分析spring和mybatis整合后FactoryBean的使用 .

我们在使用mybatis时候, 会见到这样的配置 :
这里写图片描述
这样我们就可以在service层代码中注入”userMapper”, 既可以利用”userMapper”进行数据库操作 .
我们这里不探讨如何查询数据库之类问题 , 我们来学习这里如何巧妙使用MapperFactoryBean .
我们进入class中 :
我们发现这个类实现了”FactoryBean”, 这样在spring底层生成对象的时候是会直接返回getObject()方法返回的对象 .
这里写图片描述
我们来看getObject()方法 :
这里写图片描述
实际上调用SqlSessionTemplate的getMapper方法 :
这里写图片描述
一步步跟下来…
这里写图片描述
最后会走到”MapperProxyFactory” :
最终会根据我们提供的接口和SqlSession生成一个代理类,
这里写图片描述
所以最后MapperFactoryBean的getObject()方法返回的是接口和SqlSession生成的代理类, 感兴趣的可以查看源码 .
所以我们会发现, 其实我们在使用mybatis时候, 只提供了相应的接口和Mapper配置文件, 就可以调用接口进行查询数据库, 其实是底层帮助我们生成了一个个的代理类, 这些代理类实现了我们提供接口类型 . 那么我们在service层使用接口最终调用是代理类 .
那么这些代理类生成都是利用FactoryBean, 底层为我们生成代理类, 并通过getObject()返回 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值