Spring-Bean的作用域(单实例还是多实例?)

Spring-Bean的作用域(单实例还是多实例?)

默认情况下是单实例的

使用scope属性指定

Singleton:单实例(在容器启动完成之前就已经创建好了,保存在容器中了,任何时候获取都是获取之前创建好的那个对象

 

Prototype:多实例(容器启动默认不会创建多实例bean对象,只有在获取的时候才创建,每次获取都会创建一个新的实例对象

 

一、验证:默认情况下是单实例对象

(1)创建类

public class Book {
    private String bname;
    private String bauthor;

    public void setBname(String bname) {
        this.bname = bname;
    }

    public void setBauthor(String bauthor) {
        this.bauthor = bauthor;
    }
    public void getBookInfo()
    {
        System.out.println(bname+"::"+bauthor);
    }
}

(2)配置文件

    <bean name="book" class="com.company.spring5.Book" >
        <property name="bname" value="jiang"></property>
        <property name="bauthor" value="&lt;&lt;南京&gt;&gt;"></property>
    </bean>

(3)测试

@Test
    public void booktest()
    {
        //1.加载Spring配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");

        //2.获取配置的创建对象
        Book book1 = context.getBean("book", Book.class);
        Book book2 = context.getBean("book", Book.class);

        //在spring里面,默认情况下是单实例对象
        System.out.println(book1);
        System.out.println(book2);
        //book.getBookInfo();


    }

(4)结果

com.company.spring5.Book@72cc7e6f
com.company.spring5.Book@72cc7e6f

二、如何设置多实例?

spring配置文件bean标签里面有scope属性用于设置单例还是多实例

Scope属性值

默认值:singleton表示单实例对象

第二个值:prototype表示多实例对象

(1)创建对象

public class Book {
    private String bname;
    private String bauthor;

    public void setBname(String bname) {
        this.bname = bname;
    }

    public void setBauthor(String bauthor) {
        this.bauthor = bauthor;
    }
    public void getBookInfo()
    {
        System.out.println(bname+"::"+bauthor);
    }
}

(2)配置文件

    <bean name="book2" class="com.company.spring5.Book" scope="prototype">
        <property name="bname" value="jiang"></property>
        <property name="bauthor" value="&lt;&lt;南京&gt;&gt;"></property>
    </bean>

(3)测试

@Test
    public void test2()
    {
        //1.加载Spring配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
        //2.获取配置的创建对象
        Book book1 = context.getBean("book2", Book.class);
        Book book2 = context.getBean("book2", Book.class);
        System.out.println(book1);
        System.out.println(book2);
        //book.getBookInfo();
    }

(4)结果

com.company.spring5.Book@7161d8d1
com.company.spring5.Book@74e28667

 

posted @ 2020-08-15 21:25  orz江小鱼  阅读(470)  评论(0编辑  收藏  举报