spring源码:创建单例对象时用到了ObjectFactory匿名类
来源:互联网 发布:国密算法sm2证书制作 编辑:程序博客网 时间:2024/05/16 12:18
记得在学习java语言时,书本和前辈都都着重强调接口是不能实例化的。
但如果你阅读spring源码时,你会发现有如下片段:
if (mbd.isSingleton()) { sharedInstance = getSingleton(beanName, new ObjectFactory<Object>() { @Override public Object getObject() throws BeansException { try { return createBean(beanName, mbd, args); } catch (BeansException ex) { // Explicitly remove instance from singleton cache: It might have been put there // eagerly by the creation process, to allow for circular reference resolution. // Also remove any beans that received a temporary reference to the bean. destroySingleton(beanName); throw ex; } } }); bean = getObjectForBeanInstance(sharedInstance, name, beanName, mbd);}以上是org.springframework.beans.factory.support.AbstractBeanFactory代码片段。而new出来的对象并没有实际的类作为载体,是不是很奇怪。
这就是 匿名内部类,相当于一个匿名的类实现了这个接口,只不过把类的实例化和类的实现都写在一起了。
那为何要使用匿名内部类
Think in java上说:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。它能够非常好的解决多重继承的问题,在我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。
参考:https://www.cnblogs.com/chenssy/p/3388487.html
阅读全文
0 0
- spring源码:创建单例对象时用到了ObjectFactory匿名类
- 【知识库】--spring 记录创建bean(单例)的ObjectFactory(240)
- ObjectFactory对象工厂类
- 单例对象创建
- Spring 创建对象的问题,不同构造方法创建对象,使用工厂类类获取对象、单例或多例、延迟创建问题
- 【面向对象】----概念--创建对象,匿名对象,类类型
- 【面向对象】----概念--创建对象,匿名对象,类类型2
- Spring创建单例bean
- 单例对象的创建
- iOS 单例对象创建
- struts.objectFactory和struts.objectFactory.spring.autoWire
- struts.objectFactory和struts.objectFactory.spring.autoWire
- struts.objectFactory和struts.objectFactory.spring.autoWire
- struts.objectFactory和struts.objectFactory.spring.autoWire
- struts.objectFactory和struts.objectFactory.spring.autoWire
- 构造方法,匿名对象,单例模式,Static,内部类
- 类、匿名类、静态、构造、单例
- 匿名内部类创建对象
- ARMCC和GCC编译ARM代码的软浮点和硬浮点问题
- 探究类加载机制
- Java读书笔记——02 基本结构
- linux-socket connect阻塞和非阻塞模式 示例
- SpringBoot学习笔记 入门
- spring源码:创建单例对象时用到了ObjectFactory匿名类
- 微信小程序图片
- 如何创建并运行 java 线程
- Python 的下载安装和第一个Python程序
- Java-Collection类
- php 微信消息接口
- C++ linklist
- 洛谷P1962 斐波那契数列
- 【云星数据---大数据部集群署系列003】:scala部署方案