今天我想來說說如何通過xml配置來實(shí)例化bean,其實(shí)也很簡單。
使用xml配置來實(shí)例化bean共分為三種方式,分別是普通構(gòu)造方法創(chuàng)建、靜態(tài)工廠創(chuàng)建、實(shí)例工廠創(chuàng)建,ok,那么接下來我們來分別看看這幾種方式。
普通構(gòu)造方法創(chuàng)建
這種創(chuàng)建方式使我們使用最多的一種創(chuàng)建方式,直接配置bean節(jié)點(diǎn)即可,比如我有一個(gè)user類,如下:
1
2
3
4
5
|
public class user { public void add() { system.out.println( "add()---------" ); } } |
然后通過簡單配置一個(gè)bean節(jié)點(diǎn)就可以獲取實(shí)例了,如下:
1
|
<bean class = "org.sang.user" id= "user" /> |
ok,我們通過如下代碼進(jìn)行一個(gè)簡單的測試:
1
2
3
|
applicationcontext context = new classpathxmlapplicationcontext( "applicationcontext.xml" ); user user = (user) context.getbean( "user" ); system.out.println(user); |
運(yùn)行輸出結(jié)果如下:
靜態(tài)工廠創(chuàng)建
除了通過普通的構(gòu)造方法創(chuàng)建之外,我們也可以通過靜態(tài)構(gòu)造方法來創(chuàng)建一個(gè)bean的實(shí)例,假設(shè)我有一個(gè)類叫做user2,如下:
1
2
3
4
5
|
public class user2 { public void add() { system.out.println( "add2()---------" ); } } |
我給它創(chuàng)建一個(gè)靜態(tài)工廠,如下:
1
2
3
4
5
|
public class user2factory { public static user2 getinstance() { return new user2(); } } |
該工廠中有一個(gè)靜態(tài)方法,該靜態(tài)方法返回一個(gè)user2的實(shí)例,在spring的配置文件中,我們看看如何生成user2的實(shí)例:
<bean id="user2" class="org.sang.user2factory" factory-method="getinstance"/>
還是bean節(jié)點(diǎn),只是多了一個(gè)factory-method屬性,該屬性指明該類中的靜態(tài)工廠方法名為getinstance,這樣spring框架就知道調(diào)用哪個(gè)方法來獲取user2的實(shí)例了,測試代碼如下:
1
2
3
4
5
6
|
@test public void test2() { applicationcontext context = new classpathxmlapplicationcontext( "applicationcontext.xml" ); user2 user = (user2) context.getbean( "user2" ); user.add(); } |
測試結(jié)果如下:
值得強(qiáng)調(diào)的是,這種方法并不常用。
實(shí)例工廠創(chuàng)建
小伙伴們看了靜態(tài)工廠創(chuàng)建bean實(shí)例肯定都覺得很麻煩,事實(shí)上還有比靜態(tài)工廠更麻煩的寫法,那就是通過實(shí)例工廠來創(chuàng)建bean實(shí)例。實(shí)例工廠,顧名思義,就是我們工廠中的方法不是靜態(tài)的,比如說,我有一個(gè)實(shí)體類叫做user3,如下:
1
2
3
4
5
|
public class user3 { public void add() { system.out.println( "add3()---------" ); } } |
然后我還有一個(gè)工廠方法,如下:
1
2
3
4
5
|
public class user3factory { public user3 getuser3() { return new user3(); } } |
小伙伴們看到,在user3factory類中有一個(gè)getuser3的方法,該方法返回一個(gè)user3類的實(shí)例,但是該方法不是靜態(tài)的,那么我們在spring的配置文件中要進(jìn)行怎樣的配置才能獲取user3的一個(gè)實(shí)例呢?如下:
1
2
|
<bean class = "org.sang.user3factory" id= "user3factory" /> <bean id= "user3" factory-bean= "user3factory" factory-method= "getuser3" /> |
第一個(gè)bean用來獲取user3factory的實(shí)例,第二個(gè)bean則根據(jù)user3factory的實(shí)例,然后指定factory-method,通過getuser3方法來獲取user3的實(shí)例。
測試代碼如下:
1
2
3
4
5
6
|
@test public void test3() { applicationcontext context = new classpathxmlapplicationcontext( "applicationcontext.xml" ); user3 user = (user3) context.getbean( "user3" ); user.add(); } |
測試結(jié)果如下:
ok,以上就是bean實(shí)例化的三種方式,最最常用的是第一種。
本文案例github地址https://github.com/lenve/javaeetest/tree/master/test28-spring1
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://blog.csdn.net/u012702547/article/details/56021922