1. 程式人生 > 其它 >spring學習09:Bean的作用域

spring學習09:Bean的作用域

spring學習09:Bean的作用域

  • Bean的作用域:

    Scope作用域 描述
    singleton:單例 (預設)全域性共享一個;物件只會建立一次;
    protoType:原型 每個 bean 呼叫的時候,都會單獨建立物件。

     

  • 單例模式:

    • 顯式設定為單例模式:scope="singleton"

      <bean id="address" class="com.ljxdemo.pojo.Address" scope="singleton">
         <property name="address" value="海南省xxxx號"/>
      </bean>

 

  • 原型模式:

    • bean設定為原型模式:scope="prototype";

    • 每次從容器中get的時候,都會產生一個新物件;

      <bean id="address" class="com.ljxdemo.pojo.Address" scope="prototype">
         <property name="address" value="海南省xxxx號"/>
      </bean>

       

 

  • 其他:這些只能在web開發中使用

    • request

    • session

    • application

 

 

  • 程式碼案例:xml配置檔案

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:p="http://www.springframework.org/schema/p"
          xmlns:c="http://www.springframework.org/schema/c"
          xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">

       <!-- p名稱空間注入,可以直接注入屬性的值: -->
       <bean id="user" class="com.ljxdemo.pojo.User" scope="singleton" p:age="11" p:name="demo"/>

       <!-- c名稱空間注入,通過構造器注入:constructor-arg -->
       <bean id="user2" class="com.ljxdemo.pojo.User" scope="prototype" c:age="11" c:name="張三" />

    </beans>
  • 程式碼案例:測試類

    public class MyTest2 {

       @Test
       public void test(){
           ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
           User user = (User) context.getBean("user2");
           User user2 = (User) context.getBean("user2");
           System.out.println(user==user2);
      }
    }