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