天天看點

Spring中bean的範圍

<code>spring中有5種bean的範圍:</code>

5 types of bean scopes supported :

singleton – return a single bean instance per spring ioc container 這個範圍也是預設的

prototype – return a new bean instance each time when requested

request – return a single bean instance per http request. *

session – return a single bean instance per http session. *

globalsession – return a single bean instance per global http session. *

p.s * means only valid in the context of a web-aware spring applicationcontext

我們看個關于singleton and prototype.的例子:

1

2

3

4

5

6

7

8

9

10

11

12

<code>public</code> <code>class</code> <code>customerservice</code>

<code>{</code>

<code>    </code><code>string message;</code>

<code> </code> 

<code>    </code><code>public</code> <code>string getmessage() {</code>

<code>        </code><code>return</code> <code>message;</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>void</code> <code>setmessage(string message) {</code>

<code>        </code><code>this</code><code>.message = message;</code>

<code>}</code>

<code>    </code><code>xsi:schemalocation="http:</code><code>//www.springframework.org/schema/beans</code>

<code>    </code><code>http:</code><code>//www.springframework.org/schema/beans/spring-beans-2.5.xsd"&gt;</code>

<code>       </code><code>&lt;bean id=</code><code>"customerservice"</code>

<code>            </code><code>class</code><code>=</code><code>"com.mkyong.customer.services.customerservice"</code> <code>/&gt;</code>

<code>&lt;/beans&gt;</code>

  運作:

13

14

15

16

<code>public</code> <code>class</code> <code>app</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main( string[] args )</code>

<code>    </code><code>{</code>

<code>        </code><code>applicationcontext context =</code>

<code>         </code><code>new</code> <code>classpathxmlapplicationcontext(</code><code>new</code> <code>string[] {</code><code>"spring-customer.xml"</code><code>});</code>

<code>        </code><code>customerservice custa = (customerservice)context.getbean(</code><code>"customerservice"</code><code>);</code>

<code>        </code><code>custa.setmessage(</code><code>"message by custa"</code><code>);</code>

<code>        </code><code>system.out.println(</code><code>"message : "</code> <code>+ custa.getmessage());</code>

<code>        </code><code>//retrieve it again</code>

<code>        </code><code>customerservice custb = (customerservice)context.getbean(</code><code>"customerservice"</code><code>);</code>

<code>        </code><code>system.out.println(</code><code>"message : "</code> <code>+ custb.getmessage());</code>

  輸出為:

<code>   </code><code>&lt;</code><code>bean</code> <code>id="customerservice" class="com.mkyong.customer.services.customerservice"</code>

<code>         </code><code>scope="prototype"/&gt;</code>

<code>&lt;/</code><code>beans</code><code>&gt;</code>

  運作輸出為:

17

18

19

<code>package</code> <code>com.mkyong.customer.services;</code>

<code>import</code> <code>org.springframework.context.annotation.scope;</code>

<code>import</code> <code>org.springframework.stereotype.service;</code>

<code>@service</code>

<code>@scope</code><code>(</code><code>"prototype"</code><code>)</code>

  

<code>    </code><code>http:</code><code>//www.springframework.org/schema/beans/spring-beans-2.5.xsd</code>

<code>    </code><code>http:</code><code>//www.springframework.org/schema/context</code>

<code>    </code><code>http:</code><code>//www.springframework.org/schema/context/spring-context-2.5.xsd"&gt;</code>

<code>       </code><code>&lt;context:component-scan base-</code><code>package</code><code>=</code><code>"com.mkyong.customer"</code> <code>/&gt;</code>