快捷搜索: 王者荣耀 脱发

SpringBoot配置多例实例

SpringBoot配置多例实例

一般springIOC容器取出的bean是SINGLETON单例 但是如果需要生成多例Bean怎么配置



前言

这里需要用到SpringBoot配置类,Test方法,测试POJO


提示:以下是本篇文章正文内容,下面案例可供参考

一、测试POJO

public class Dode {
          
   
    private int id;
    private Dode nextdode;

    public Dode getNextdode() {
          
   
        return nextdode;
    }

    public void setNextdode(Dode nextdode) {
          
   
        this.nextdode = nextdode;
    }

    public Dode() {
          
   
    }

    public int getId() {
          
   
        return id;
    }

    public void setId(int id) {
          
   
        this.id = id;
    }
}

这里@Data省去了getset方法和tostring @Scope里面参数表示注入多例

二、配置类

代码如下(示例):

@RestController
public class pojoconfig {
          
   

    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

    public Dode mkdode(){
          
   
        return new Dode();
    }
}

测试类

代码如下(示例):

@SpringBootTest
class DemoApplicationTests {
          
   

    @Autowired
    ApplicationContext applicationContext;

    @Test
    void contextLoads() {
          
   

        Dode head = (Dode) applicationContext.getBean("mkdode");
        Dode next = (Dode) applicationContext.getBean("mkdode");
        Dode dode3 = (Dode) applicationContext.getBean("mkdode");
        Dode dode4 = (Dode) applicationContext.getBean("mkdode");
        Dode pre = (Dode) applicationContext.getBean("mkdode");

        System.out.println(head);
        System.out.println(next);
        System.out.println(dode3);
com.ldz.demo.POJO.Dode@4da9f723
com.ldz.demo.POJO.Dode@3b2f4a93
com.ldz.demo.POJO.Dode@213bd3d5

代理方法获取Bean

@RestController
@Configuration(proxyBeanMethods = false)
public class pojoconfig {
          
   

    @Bean
//    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

    public Dode mkdode(){
          
   
        return new Dode();
    }
}

被@Configuration注解的配置类被springCG接管的代理类,选项proxyBeanMethods = true的时候,spring会实时检查,配置类里面的bean是否在容器中存在,如果存在就调用容器里的组件所以,代理类创造的bean是同一个Bean 如果@Configuration(proxyBeanMethods = false) 被标注的配置类就不是代理对象 多次调用生成Bean方法,生成的Bean不是同一个Bean

pojoconfig pojoconfig = applicationContext.getBean(pojoconfig.class);
        Dode dode1 = pojoconfig.mkdode();
        Dode dode2 = pojoconfig.mkdode();
		    System.out.println(dode1==dode2);
false

总结

这样的方法会得到不同的dode实例

经验分享 程序员 微信小程序 职场和发展