实例
/** * 静态工厂 * @date 2020.04.01 */ public class ExternalBeanStaticFactory { private static OkHttpClient OkHttpClient; public static OkHttpClient getInstance() { if (OkHttpClient == null) { OkHttpClient = new OkHttpClient.Builder().build(); } return OkHttpClient; } }
/** * 动态工厂 * @author cxy * @date 2020.04.01 */ public class ExternalBeanFactory { private OkHttpClient OkHttpClient; public OkHttpClient getInstance() { if (OkHttpClient == null) { OkHttpClient = new OkHttpClient.Builder().build(); } return OkHttpClient; } }
<!-- 静态工厂 --> <bean class="net.web.ExternalBeanStaticFactory" factory-method="getInstance" id="okHttpClientStatic"></bean> <!-- 动态工厂 --> <bean class="net.web.ExternalBeanFactory" id="ExternalBeanFactory"/> <bean class="okhttp3.OkHttpClient" factory-bean="ExternalBeanFactory" factory-method="getInstance" id="okHttpClient"></bean>
可以看到,静态工厂的方法多了 static 关键字,而动态工厂就对了个bean 配置,看到这里我们来总结一下:
- 逻辑代码和配置方式的区别(这也是CSDN看到最多的关于这两者的解释)
- 动态工厂需要更多的内存(达到一定的并发)