springboot中使用原型模式
springboot中的bean默认是单例模式,一个类只有一个对象。
但有时候我们希望每个类有多个对象。那么处理自己new Object之外,springboot是否支持这种操作呢?
答案是肯定的。
首先我们定义一个Animal接口,和他的两个实现类
狮子只有一个,老虎有两个,所有我们给老虎Bean指定了原型模式。
public interface Animal { String getName(); } //狮子只有一个 public class AnimalLion implements Animal { private String name; public AnimalLion(String name) { this.name = name; } @Override public String getName() { return name; } } //老虎会有两个 public class AnimalTiger implements Animal { private String name; public AnimalTiger(String name) { this.name = name; } @Override public String getName() { return name; } } @Configuration public class AnimalFactory { @Bean(name = {"tigerA", "tigerB"}) @Scope(value = "prototype") Animal getTiger(String name) { return new AnimalTiger(name); } @Bean Animal getLion() { String name = "lionA"; return new AnimalLion(name); } }
测试一下:
@SpringBootTest(classes= MetaCenterApplication.class) class AnimalFactoryTest { @Autowired private AnimalFactory animalFactory; @Test void get() { Animal tigerA = animalFactory.getTiger("tigerA"); Animal tigerB = animalFactory.getTiger("tigerB"); Animal lionA = animalFactory.getLion(); Animal lionB = animalFactory.getLion(); System.out.println(tigerA.getName()); System.out.println(tigerB.getName()); System.out.println(lionA.getName()); System.out.println(tigerA==tigerB); System.out.println(lionA==lionB); } }
输出:
我们发现老虎果然生成了两个实例,而狮子只有一个。
tigerA tigerB lionA false true
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南