《Java從入門到放棄》入門篇:spring中IOC的注入姿式

IOC究竟是個什麼東東呢?控制反轉(Inversion of Control,英文縮寫爲IoC),其實就是這個東東。java

 

你隨便百度一下就會獲得比較書面的解釋:經過引入實現了IoC模式的IoC容器,便可由IoC容器來管理對象的生命週期、依賴關係等,從而使得應用程序的配置和依賴性規範與實際的應用程序代碼分開。其中一個特色就是經過文本的配置文件進行應用程序組件間相互關係的配置,而不用從新修改並編譯具體的代碼。spring

 

說了這麼多,經過一個例子就能很好的來理解。之前小王要找對象,要麼雲茫茫人海中進行匹配(經過 小王.對象=小張 這樣的語法進行關聯),要麼經過3D打印直接打印出心中女神的樣子(經過new實例化),而如今,只要到51CTO婚介中心去註冊,同時提出本身的要求,51CTO婚介中心就會在全部的註冊用戶中進行匹配,若是有匹配上的就安排小王去相親。app

這兒的51CTO婚介心中就至關因而IOC容器,同時,由於有了中介(Ioc容器),找對象是否是變得很是簡單了(不少事情不用小王本身去處理)。測試

 

解釋完畢,接下來介紹spring中的IOC,其注入方式有如下三種:this

  1. 屬性注入(set注入)spa

  2. 構造器注入(構造方法注入)code

  3. 工廠注入(不多使用,你若是非要用····,那就本身搞定吧,哈哈)xml

 

接下來,有請代碼君上場!j_0020.gif(的寫代碼前記得導入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) 顯示結果以下:

wKioL1mBUTHT2ueDAAArJvKvTnA987.png

 

以上是基本數據類型的注入寫法,若是包含自定義類型,則作以下修改:

    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());
}

wKiom1mBU5qAToniAAAs6EPplBg560.png

屬性注入的方式到這兒就告一段落....j_0042.gif

 

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());
}

wKiom1mBVZbSOZTMAAAqTwL5ufs190.png

今天的內容就到這兒,感謝各位看官百閒中無聊逛到這兒而且還看完了!!!

最後,請各位看官離開前點個贊,若是實在沒別的事作,順便評論兩句...j_0019.gif

相關文章
相關標籤/搜索