日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

java 实例化 bean,Spring(02)——bean实例化

發(fā)布時(shí)間:2025/3/21 javascript 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 实例化 bean,Spring(02)——bean实例化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2 bean的實(shí)例化

2.1 構(gòu)造方法實(shí)例化

bean的實(shí)例化默認(rèn)是通過(guò)構(gòu)造方法進(jìn)行的,在未指定構(gòu)造方法參數(shù)的情況下,默認(rèn)會(huì)通過(guò)無(wú)參構(gòu)造方法來(lái)進(jìn)行bean的實(shí)例化。如下這種就是通過(guò)無(wú)參構(gòu)造方法進(jìn)行實(shí)例化的。

所以在像如上這種沒(méi)有配置構(gòu)造參數(shù)使用無(wú)參構(gòu)造方法進(jìn)行實(shí)例化時(shí)一定要保證對(duì)應(yīng)的Class擁有一個(gè)public的無(wú)參構(gòu)造方法。如果我們的構(gòu)造方法是有參數(shù)的,則需要通過(guò)constructor-arg來(lái)指定對(duì)應(yīng)的參數(shù),如下這種就是通過(guò)配置構(gòu)造參數(shù)使用構(gòu)造方法進(jìn)行實(shí)例化的。

當(dāng)參數(shù)類型為基本數(shù)據(jù)類型時(shí)可以直接通過(guò)constructor-arg元素的value屬性指定對(duì)應(yīng)的值,如上面示例中的value=”hello”就是這樣的。

當(dāng)有多個(gè)構(gòu)造參數(shù)時(shí)就需要使用多個(gè)constructor-arg進(jìn)行定義,默認(rèn)會(huì)將定義的順序作為參數(shù)的順序。

public class Hello {

public Hello(String str1, boolean b2, int i3) {

}

}

如上Class,我們?cè)诙x對(duì)應(yīng)的bean時(shí)可以如下定義,這個(gè)時(shí)候默認(rèn)會(huì)按照定義的順序?qū)⒌谝粋€(gè)參數(shù)賦值給構(gòu)造方法的第一個(gè)參數(shù),第二個(gè)給第二個(gè),第n個(gè)給第n個(gè)。

當(dāng)然,我們也可以明確的利用index來(lái)指定constructor-arg對(duì)應(yīng)參數(shù)的位置,index是從0開(kāi)始的,即第一個(gè)參數(shù)對(duì)應(yīng)的index為0。使用index時(shí),Hello對(duì)應(yīng)的bean可以如下定義。

當(dāng)構(gòu)造參數(shù)對(duì)應(yīng)于ApplicationContext中的一個(gè)bean時(shí),我們也可以通過(guò)ref屬性關(guān)聯(lián)對(duì)應(yīng)的bean。

public class Hello {

public Hello(World world1) {

}

}

我們還可以通過(guò)constructor-arg元素的name屬性來(lái)指定對(duì)應(yīng)constructor-arg對(duì)應(yīng)的參數(shù),如:

public class Hello {

public Hello(String s1, int i2) {

}

}

但是這需要我們的Class是通過(guò)debug方式進(jìn)行編譯的,這樣Spring才能識(shí)別出對(duì)應(yīng)的參數(shù)名稱。當(dāng)然我們也可以通過(guò)JDK提供的@ConstructorProperties注解來(lái)指定構(gòu)造參數(shù)對(duì)應(yīng)的名稱。如:

public class Hello {

@ConstructorProperties({"s1", "i2"})

public Hello(String s1, int i2) {

}

}

當(dāng)我們的構(gòu)造參數(shù)比較復(fù)雜,比如是一個(gè)array、list、set、map等或者需要定義一個(gè)內(nèi)部的bean時(shí),我們可以直接在constructor-arg元素中間進(jìn)行定義,如:

2.2 靜態(tài)方法實(shí)例化

如果我們的bean是通過(guò)指定Class的靜態(tài)方法進(jìn)行實(shí)例化的,則我們可以通過(guò)指定Class為擁有對(duì)應(yīng)靜態(tài)方法的Class,指定factory-method為對(duì)應(yīng)的實(shí)例化靜態(tài)方法。假設(shè)我們擁有如下這樣一個(gè)Class。

public class Hello {

public static World createWorld() {

return new World();

}

public static class World {

}

}

現(xiàn)需要通過(guò)Hello的createWorld靜態(tài)方法來(lái)構(gòu)造一個(gè)類型為World的bean,那么我們可以如下定義:

從以上定義我們可以看到在通過(guò)靜態(tài)方法實(shí)例化對(duì)應(yīng)的bean時(shí)是不需要指定對(duì)應(yīng)的bean的類型的,指定的class是對(duì)應(yīng)靜態(tài)方法所在的Class。實(shí)例化的bean的類型Spring將根據(jù)factory-method指定方法的返回值決定。

如果我們用于實(shí)例化的靜態(tài)方法factory-method是需要接收參數(shù)的,那么對(duì)應(yīng)的參數(shù)將通過(guò)constructor-arg來(lái)定義,定義的規(guī)則和定義構(gòu)造方法參數(shù)是一樣的。來(lái)看一個(gè)示例,現(xiàn)將我們的Hello和World的定義改為如下這樣,Hello中用來(lái)實(shí)例化World對(duì)象的createWorld方法需要接收兩個(gè)參數(shù)。

public class Hello {

public static World createWorld(String s1, int i2) {

return new World(s1, i2);

}

}

public class World {

public World(String s1, int i2) {

}

}

那么我們對(duì)應(yīng)的bean定義應(yīng)該是這樣的:

2.3 通過(guò)實(shí)例方法進(jìn)行實(shí)例化

有時(shí)候我們的bean可能是需要通過(guò)某個(gè)對(duì)象進(jìn)行實(shí)例化的,這個(gè)時(shí)候我們可以通過(guò)factory-bean指定用來(lái)實(shí)例化該bean的對(duì)應(yīng)對(duì)象,通過(guò)factory-method指定factory-bean中用來(lái)實(shí)例化該bean的方法。factory-bean必須也是屬于ApplicationContext中的一個(gè)bean。如我們有如下這樣一個(gè)類Hello,其中擁有一個(gè)實(shí)例方法createWorld將實(shí)例化一個(gè)World對(duì)象。

public class Hello {

public World createWorld() {

return new World();

}

}

如果我們需要定義一個(gè)bean使用Hello的實(shí)例對(duì)象的createWorld方法來(lái)實(shí)例化對(duì)應(yīng)的World對(duì)象,則可以這樣定義:

此時(shí)也是不需要指定class的,如果用戶指定了class,Spring也會(huì)將其忽略,對(duì)應(yīng)bean的類型將由factory-method指定方法的返回值決定。當(dāng)factory-method需要接收參數(shù)時(shí),則對(duì)應(yīng)的參數(shù)可以通過(guò)constructor-arg來(lái)定義。如我們的Hello是這樣定義的,其createWorld方法需要接收參數(shù)。

public class Hello {

public World createWorld(String s1, int i2) {

return new World(s1, i2);

}

}

那么,對(duì)應(yīng)的bean應(yīng)該如下定義:

(注:本文是基于Spring4.1.0所寫)

本文轉(zhuǎn)自:http://elim.iteye.com/blog/2382031

總結(jié)

以上是生活随笔為你收集整理的java 实例化 bean,Spring(02)——bean实例化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。