Java interface 延迟执行

160 阅读1分钟

Java lamda表达式

package org.ioc.test;




interface Haha{

    Object getObject();
}

public class TestFunctionalInterface {


    /**
     * 通过这种方式可以实现延迟运行
     * @param haha
     */
    public void fun(Haha haha){
        // 调用才运行
        Object object = haha.getObject();
    }



    public static void main(String[] args) {

        // 传参不会运行
        new TestFunctionalInterface().fun(()->{
            System.out.println("haha");
            Object o = new Object();
            return o;
        });


    }
}

spring中使用位置

接口

image.png

org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean

public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) {}

传入一个实现了接口的匿名内部类,让这个接口在这个方法中被执行 image.png

实际调用位置

org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, org.springframework.beans.factory.ObjectFactory<?>)

image.png