java8的Supplier
java8的Supplier
参考:
java.util.function.Supplier
定义
supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,每次调用get()
方法时都会调用构造方法创建一个新对象。
public class TestSupplier {
private int age;
TestSupplier(){
System.out.println(age);
}
public static void main(String[] args) {
//创建Supplier容器,声明为TestSupplier类型,此时并不会调用对象的构造方法,即不会创建对象
Supplier<TestSupplier> sup= TestSupplier::new;
System.out.println("--------");
//调用get()方法,此时会调用对象的构造方法,即获得到真正对象
sup.get();
//每次get都会调用构造方法,即获取的对象不同
sup.get();
}
}
输出结果:
--------
0
0
源码
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
案例
类似多例调用
@Bean
public Supplier<User> hbaseConnSupplier() {
return () -> {
User user = new User((int) (Math.random() * 1000));
System.out.println("调用了hbaseConnSupplier,User:id:" + user.getId());
return user;
};
}
controller调用
@Autowired
private Supplier<User> hbaseConnSupplier;
@RequestMapping("/test2")
public void test2(){
User user = hbaseConnSupplier.get();
System.out.println("test2:user:id:"+ user.getId());
System.out.println("test2:user:id2:"+ user.getId());
user=hbaseConnSupplier.get();
System.out.println("test2:user:id3:"+ user.getId());
System.out.println("----------------------");
}
输出
调用了hbaseConnSupplier,User:id:286
test2:user:id:286
test2:user:id2:286
调用了hbaseConnSupplier,User:id:13
test2:user:id3:13
----------------------
每次调用get方法都获取一个新的User
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 开箱你的 AI 语音女友「GitHub 热点速览」
· 前端实现 HTML 网页转 PDF 并导出
· 特斯拉CEO埃隆.马斯克的五步工作法,怎么提高工程效率加速产品开发?