Spring學習1:Spring基本特性
http://longliqiang88.github.io/2015/08/14/Spring%E5%AD%A6%E4%B9%A01%EF%BC%9ASpring%E5%9F%BA%E6%9C%AC%E7%89%B9%E6%80%A7/
Spring學習1:Spring基本特性
Spring基本特征
開發spring所需要的工具
Spring的jar包
到http://www.springsource.org/download下載spring,然後進行解壓縮,在解壓目錄中找到下面jar文件,拷貝到類路徑下
—spring的核心類庫 在spring文檔的dist下
dist\spring.jar
—引入的第三方類庫 都spring文檔的lib下
lib\jakarta-commons\commons-logging.jar
如果使用了切面編程(AOP),還需要下列jar文件
lib/aspectj/aspectjweaver.jar和aspectjrt.jar
lib/cglib/cglib-nodep-2.1_3.jar
如果使用了JSR-250中的註解,如@Resource/@PostConstruct/@PreDestroy,還需要下列jar文件
lib\j2ee\common-annotations.jar
註:JSR(Java 規範請求)是指向JCP(Java Community Process)提出新增一個標準化技術規範的正式請求。任何人都可以提交JSR(Java 規範請求),以向Java平臺增添新的API和服務。JSR已成為Java界的一個重要標準
Spring配置文件
默認情況下是applicationContext.xml文件。可以建立很多xml文件,工程中一般都是這樣配置的。
Spring IOC
IOC指的是控制反轉,把對象的創建、初始化、銷毀等工作都交給Spring容器。由spring容器來控制對象的生命周期。下圖可以說明我們傳統創建類的方式和使用Spring之後的區別:
1
|
public class HelloWorld {
|
Spring配置文件:
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
main方法的代碼如下:
1
|
public static void main(String[] args){
|
Spring容易創建對象的意義:程序員可以更加專註於業務的開發,而不用管對象的創建、銷毀等,把這些操作都交給Spring容器完成。
Spring創建對象的方式
無參構造方法
如果在配置文件中只使用id和class屬性配置bean,則默認調用類的無參構造方法進行實例化,代碼如下所示:
1
|
<bean id="helloWorld" class="cn.zju.spring.HelloWorld"></bean>
|
上述配置將調用HelloWorld類的無參構造方法來創建HelloWorld實例。
靜態工廠
有些類中提供了靜態的工廠方法返回實例,假設HelloWorldFactory類中有如下的靜態工廠方法:
1
|
public class HelloWorldFactory {
|
在配置文件中使用factory-method屬性調用改靜態工廠方法,創建HelloWorld實例,代碼如下:
1
|
<bean id="helloWorldFactory" class="cn.zju.spring.HelloWorldFactory"></bean>
|
實例工廠方法
- 提供工廠類
- 把工廠放到Spring容器中
- 在Spring容器中指定工廠類的工廠方法
- 在客戶端中創建對象
1
2<bean id="helloWorldFactory" class="cn.zju.spring.HelloWorldFactory"></bean>
<bean id="helloWorld" class="cn.zju.spring.HelloWorldFactory" factory-bean="helloWorldFactory" factory-method="getInstance"></bean>
Spring對象初始化bean時機
在默認情況下,只要在Spring容器中配置了一個bean,容器在啟動時就會實例化該bean,單例模式。
如果在Spring配制文件時設置懶加載模式(lazy-init=”true”),在getBean時才會實例化對象。
如果scope=”prototype”時,無論lazy-init的值是什麽都只會在使用時才會創建,當struts2的action和spring容器整合的時候,action的scope設置成prototype。
Spring容器的生命周期
- 啟動spring容器
- 創建helloWorld對象
- 調用helloWorld對象的init方法,init方法是由spring容器內部調用的
- 在客戶端提取helloWorld對象,對象調用方法
- 當spring容器關閉的時候,執行destroy方法:註意:前提條件:必須為單例,如果多實例,不起作用。
Spring學習1:Spring基本特性