一、匿名类原理

背景

在研究spring源码的时候,看到下面一段代码:

addSingletonFactory(beanName, new ObjectFactory() {
    @Override
    public Object getObject() throws BeansException {
        //获取bean实例
        return getEarlyBeanReference(beanName, mbd, bean);
    }
});
 
 

因为这个ObjectFactory是存在Map中,以后再调用,而不是利用回调的方式,当时就在想匿名类没有成员变量,是如何把beanName这些参数给保存起来的?

分析

我写了下面代码分析:

public class AnonymousClassTest {
    interface ObjectFactory {
        void invoke();
    }
    public static void print(String str) {
        System.out.println(str);
    }
    public static void main(String[] args) {
        String str = "Hello World";
        ObjectFactory factory = new ObjectFactory() {
            @Override
            public void invoke() {
                print(str);
            }
        };
        factory.invoke();
    }
}

然后用java -v查看字节码,省略常量池代码,结果如下:


一、匿名类原理_第1张图片
image.png

看到字节码之后就能够一目了然了,匿名类会把参数转换成类的成员变量,并在构造函数中把值初始化。

你可能感兴趣的:(一、匿名类原理)