系列五、IOC操作bean管理(bean的作用域)

一、概述

        在Spring里面,设置创建bean的实例是单实例还是多实例。默认情况下,bean是单实例的。

二、验证Spring的单实例bean

// 实体类
public class Book implements Serializable {

    /**
     * 书名
     */
    private String name;

    /**
     * 作者
     */
    private String author;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("Book setName invoked...");
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        System.out.println("Book setAuthor invoked...");
        this.author = author;
    }
}

// bean配置



    




// 测试
/**
 * 验证默认情况下,Spring中的bean是单实例bean
 */
@Test
public void beanManagementTest9() {
	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext10.xml");
	Book book1 = context.getBean("book", Book.class);
	Book book2 = context.getBean("book", Book.class);
	System.out.println("book1 = " + book1);
	System.out.println("book2 = " + book2);
}
// 控制台打印结果
book1 = org.star.entity.Book@77ec78b9
book2 = org.star.entity.Book@77ec78b9

三、设置bean的作用域

(1)Spring的配置文件bean标签里面有属性(scope),可以用于设置bean是单实例还是多实例;

(2)scope属性的值:

  • singleton:默认值,表示单实例;
  • prototype:多实例        

(3)singleton和prototype的区别?

  • singleton是单实例,prototype是多实例;
  • bean的属性scope的值如果为singleton的时候,加载spring配置文件的时候就会创建单实例对象,当scope的值是prototype的时候,不是在加载spring配置文件的时候创建对象,而是在调用getBean()方法的时候才创建多实例对象;

四、设置bean为多实例

// 实体类
public class Book implements Serializable {

    /**
     * 书名
     */
    private String name;

    /**
     * 作者
     */
    private String author;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("Book setName invoked...");
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        System.out.println("Book setAuthor invoked...");
        this.author = author;
    }
}

// bean配置



    




// 测试
/**
 * 设置bean为多实例
 */
@Test
public void beanManagementTest10() {
	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext10.xml");
	Book book1 = context.getBean("book", Book.class);
	Book book2 = context.getBean("book", Book.class);
	System.out.println("book1 = " + book1);
	System.out.println("book2 = " + book2);
	System.out.println((book1 == book2) ? "相等" : "不相等" );
}
// 控制台打印结果
book1 = org.star.entity.Book@46daef40
book2 = org.star.entity.Book@12f41634
不相等

你可能感兴趣的:(Spring5系列,sql,数据库,java)