Spring 容器源码

82 阅读1分钟

解析Bean

XMLBeanFactory

XmlBeanFactory.png

加载Bean

FactoryBean

public interface FactoryBean<T> {

    String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";

    //获得目标实例
    @Nullable
    T getObject() throws Exception;

    //获得要生成的目标类的类型
    @Nullable
    Class<?> getObjectType();

    //是否为单例
    default boolean isSingleton() {
        return true;
    }

}

Spring使用工厂模式来实例化某些复杂的Bean,来避免复杂的XML配置。


例子

public class MyBean{
    public MyBean(/*多个参数*/){
        //复杂的初始化过程
    }
}
public class MyBeanFactionary implements FactoryBean<MyBean>{

    @Override
    public MyBean getObject() throws Exception {
        //构造多个复杂参数
        MyBean myBean=new MyBean(/*写入参数*/);
        //对myBean进行定制化
        return myBean;
    }

    @Override
    public Class<?> getObjectType() {
        return MyBean.class;
    }

    @Override
    public boolean isSingleton() {
        return FactoryBean.super.isSingleton();
    }
}
<bean id="myBean" class="com.MyBeanFactionary" /> 也可以传入自定义参数

通过以上代码可以避免复杂的Xml配置

按类取Bean

按类获取Bean.png

按名获取Bean

从缓存中获取或准备创建Bean

Bean创建准备 按名取Bean.png

创建Bean

创建Bean.png