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

 

posted @   Mars.wang  阅读(525)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示