<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"></code>
<code> </code><code><bean id=</code><code>"customerservice"</code>
<code> </code><code>class</code><code>=</code><code>"com.mkyong.customer.services.customerservice"</code> <code>/></code>
<code></beans></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><</code><code>bean</code> <code>id="customerservice" class="com.mkyong.customer.services.customerservice"</code>
<code> </code><code>scope="prototype"/></code>
<code></</code><code>beans</code><code>></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"></code>
<code> </code><code><context:component-scan base-</code><code>package</code><code>=</code><code>"com.mkyong.customer"</code> <code>/></code>