IOC究竟是個什麼東東呢?控制反轉(Inversion of Control,英文縮寫爲IoC),其實就是這個東東。java
你隨便百度一下就會獲得比較書面的解釋:經過引入實現了IoC模式的IoC容器,便可由IoC容器來管理對象的生命週期、依賴關係等,從而使得應用程序的配置和依賴性規範與實際的應用程序代碼分開。其中一個特色就是經過文本的配置文件進行應用程序組件間相互關係的配置,而不用從新修改並編譯具體的代碼。spring
說了這麼多,經過一個例子就能很好的來理解。之前小王要找對象,要麼雲茫茫人海中進行匹配(經過 小王.對象=小張 這樣的語法進行關聯),要麼經過3D打印直接打印出心中女神的樣子(經過new實例化),而如今,只要到51CTO婚介中心去註冊,同時提出本身的要求,51CTO婚介中心就會在全部的註冊用戶中進行匹配,若是有匹配上的就安排小王去相親。app
這兒的51CTO婚介心中就至關因而IOC容器,同時,由於有了中介(Ioc容器),找對象是否是變得很是簡單了(不少事情不用小王本身去處理)。測試
解釋完畢,接下來介紹spring中的IOC,其注入方式有如下三種:this
屬性注入(set注入)spa
構造器注入(構造方法注入)code
工廠注入(不多使用,你若是非要用····,那就本身搞定吧,哈哈)xml
接下來,有請代碼君上場!(的寫代碼前記得導入spring相關Jar包)對象
1、屬性注入blog
屬性注入有兩種狀況,一種是Java基本數據類型,一種是自定義類型,具體代碼請往下看:
1.1) 編寫Song實體類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
//歌曲類
public
class
Song {
private
int
songID;
//歌曲ID
private
String songName;
//歌曲名
private
String songType;
//歌曲類型
public
Song() { }
public
Song(
int
songID, String songName, String songType) {
this
.songID = songID;
this
.songName = songName;
this
.songType = songType;
}
public
int
getSongID() {
return
songID;
}
public
void
setSongID(
int
songID) {
this
.songID = songID;
}
public
String getSongName() {
return
songName;
}
public
void
setSongName(String songName) {
this
.songName = songName;
}
public
String getSongType() {
return
songType;
}
public
void
setSongType(String songType) {
this
.songType = songType;
}
}
|
1.2) 在spring配置文件中注入bean對象
1
2
3
4
5
6
7
8
9
10
11
12
|
<
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"
xsi:schemaLocation
=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"
>
<
bean
id
=
"yjm"
class
=
"com.pxy.entity.Song"
>
<
property
name
=
"songID"
value
=
"10086"
></
property
>
<
property
name
=
"songName"
value
=
"一剪梅"
></
property
>
<
property
name
=
"songType"
value
=
"經典老歌"
></
property
>
</
bean
>
</
beans
>
|
1.3) 建立Test類進行測試(簡單點,普通類包含main方法就行)
1
2
3
4
5
6
|
public
static
void
main(String[] args) {
ApplicationContext applicationContext =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
Song song = applicationContext.getBean(
"yjm"
, Song.
class
);
System.out.println(
"歌曲名:"
+song.getSongName());
System.out.println(
"歌曲類型:"
+song.getSongType());
}
|
1.4) 顯示結果以下:
以上是基本數據類型的注入寫法,若是包含自定義類型,則作以下修改:
1.5) 添加Singer實體類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public
class
Singer {
private
int
singerID;
//歌手ID
private
String singerName;
//歌手姓名
private
String area;
//所屬地區
public
int
getSingerID() {
return
singerID;
}
public
void
setSingerID(
int
singerID) {
this
.singerID = singerID;
}
public
String getSingerName() {
return
singerName;
}
public
void
setSingerName(String singerName) {
this
.singerName = singerName;
}
public
String getArea() {
return
area;
}
public
void
setArea(String area) {
this
.area = area;
}
}
|
1.6) 在Song類中添加Singer屬性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//歌曲類
public
class
Song {
//以前代碼省略...
//新增代碼
private
Singer singer;
//對應歌手
public
Singer getSinger() {
return
singer;
}
public
void
setSinger(Singer singer) {
this
.singer = singer;
}
}
|
1.7) 修改配置文件,添加Singer對象,並在Song對象中使用 ref 進行引用
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!-- 建立Singer對象fyq -->
<
bean
id
=
"fyq"
class
=
"com.pxy.entity.Singer"
>
<
property
name
=
"singerID"
value
=
"10000"
></
property
>
<
property
name
=
"singerName"
value
=
"費玉清"
></
property
>
</
bean
>
<!-- 建立Song對象yjm -->
<
bean
id
=
"yjm"
class
=
"com.pxy.entity.Song"
>
<
property
name
=
"songID"
value
=
"10086"
></
property
>
<
property
name
=
"songName"
value
=
"一剪梅"
></
property
>
<
property
name
=
"songType"
value
=
"經典老歌"
></
property
>
<!-- 使用ref引用上面的bean -->
<
property
name
=
"singer"
ref
=
"fyq"
></
property
>
</
bean
>
|
1.8) 修改測試類並查看結果
1
2
3
4
5
6
7
|
public
static
void
main(String[] args) {
ApplicationContext applicationContext =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
Song song = applicationContext.getBean(
"yjm"
, Song.
class
);
System.out.println(
"歌曲名:"
+song.getSongName());
System.out.println(
"歌曲類型:"
+song.getSongType());
System.out.println(
"歌手:"
+song.getSinger().getSingerName());
}
|
2、構造器注入
前面咱們已經在Song類中編寫了構造方法Song(int songID, String songName, String songType),接下來,咱們直接在spring配置文件中經過構造器方式來注入看看效果。
2.1) 在spring配置文件中注入bean對象
1
2
3
4
5
|
<
bean
id
=
"jht"
class
=
"com.pxy.entity.Song"
>
<
constructor-arg
index
=
"0"
value
=
"10088"
></
constructor-arg
>
<
constructor-arg
index
=
"1"
value
=
"菊花臺"
></
constructor-arg
>
<
constructor-arg
index
=
"2"
value
=
"流行歌曲"
></
constructor-arg
>
</
bean
>
|
2.2) 在Test類中查看效果
1
2
3
4
5
6
|
public
static
void
main(String[] args) {
ApplicationContext applicationContext =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
Song song = applicationContext.getBean(
"jht"
, Song.
class
);
System.out.println(
"歌曲名:"
+song.getSongName());
System.out.println(
"歌曲類型:"
+song.getSongType());
}
|
今天的內容就到這兒,感謝各位看官百閒中無聊逛到這兒而且還看完了!!!