很久之前就想系統的學習和掌握Spring框架,但是拖了很久都沒有行動。現在趁著在外出差雜事不多,就花時間來由淺入深的研究下Spring框架。Spring框架這幾年來已經發展成為一個巨無霸產品。從最初的只是用來作為依賴注入到現在已經是無法不包。其涉及的領域有依賴注入、MVC、JMS、Web flow、Batch job、Web service、Security…..幾乎是涵蓋了技術開發的所有方面。本人雖然從事Java語言開發時間不長,但是對Spring中的很多元件都有所涉獵,比如上面列出的那幾個都有用過。可以說Spring是Java程式設計師必須要掌握的一個庫。
現在Spring的最新的穩定版本是4.0.2,該版本中包含了大量的新特性,是比較重要的一次release。本系列將基本使用該版本進行講解。
第一講就用一個簡單的例子開始吧,初步學會使用Spring-Context的依賴注入功能。
首先使用maven建立一個新的專案。
1
|
$: mvn archetype:generate
|
建立成功後在pom.xml檔案中加入對Spring-Context的依賴。
pom.xml
1
2
3
4
5
6
7
|
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
</dependencies>
|
然後我們建立一個MovieService的介面。
MovieService.java
1
2
3
4
5
6
|
package huangbowen.net.service;
public interface MovieService {
String getMovieName();
}
|
建立一個DefaultMovieService來實現這個介面。
DefaultMovieService.java
1
2
3
4
5
6
7
8
|
package huangbowen.net.service;
public class DefaultMovieService implements MovieService {
public String getMovieName() {
return "A Touch of Sin";
}
}
|
然後建立一個Cinema類,會使用MoviceService來放電影。
Cinema.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package huangbowen.net.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Cinema {
@Autowired
private MovieService movieService;
public void printMovieName() {
System.out.println(movieService.getMovieName());
}
}
|
建立一個Application類。
Application.java
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
|
package huangbowen.net;
import huangbowen.net.service.Cinema;
import huangbowen.net.service.DefaultMovieService;
import huangbowen.net.service.MovieService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan
public class Application
{
@Bean
public MovieService getMovieService() {
return new DefaultMovieService();
}
public static void main( String[] args )
{
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Application.class);
Cinema cinema = applicationContext.getBean(Cinema.class);
cinema.printMovieName();
}
}
|
Ok,執行main函式,得到控制檯輸出:
本例子中主要使用Annotation功能來實現對MoviceService的注入。我們將Cinema.java的頭部標註為@Component說明該類交由Spring託管。而Cinema.java中的屬性MoviceService標註為@Autowired,則Spring在初始化Cinema類時會從Application Context中找到型別為MovieService的Bean,並賦值給Cinema。在Application.java中我們宣告瞭一個型別為MovieService的Bean。並且標註Application.java為@Configuration,這是告訴Spring在Application.java中定義了一個或多個@Bean方法,讓Spring容器可以在執行時生成這些Bean。@ComponentScan則會讓Spring容器自動掃描當前package下的標有@Component的class,這些class都將由Spring託管。
本例中的原始碼請在我的GitHub上自行下載。