前言
Spring框架为开发者提供了很多可扩展的点,FactoryBean接口就是其中一个,常用于返回包装之后的Bean对象,例如实现指定注解的动态代理功能等。
接口定义
public interface FactoryBean<T> { |
自定义扩展实现
本案例只是模拟Spring的动态代理功能,但是Spring并不是扩展FactoryBean接口实现的,而是扩展BeanPostProcessor接口实现,关于这个后续会讲到,不是本篇的重点。
public static class ProxyFactoryBean<T> implements FactoryBean<T> { |
测试用例
public static void main(String[] args) { |
输出结果:MethodInterceptorImpl:print
PrintClass
实现原理分析
核心类:AbstractBeanFactory 继承自 FactoryBeanRegistrySupport。当从IOC容器中调用getBean方法时,底层会调用AbstractBeanFactory的getObjectForBeanInstance方法,如果当前BeanDefinition关联的beanClass为FactoryBean类型则调用其getObject方法,如果是普通类型则直接返回该实例。
AbstractBeanFactory 类:
/** |
FactoryBeanRegistrySupport类:
|