1. 程式人生 > >Spring學習1:Spring基本特性

Spring學習1:Spring基本特性

情況下 jakarta .get 開源框架 ext.get work jar 就會 spa

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是一個非常活躍的開源框架;它是一個基於Core來構架多層JavaEE系統的框架,它的主要目地是簡化企業開發。
Spring以一種非侵入式的方式來管理你的代碼,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之後的區別:
技術分享圖片Spring IOC
代碼實現如下:
首先創建Helloworld類:

1
2
3
4
5
public class HelloWorld {
public void hello(){
System.out.println("hello world");
}
}

Spring配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!--
表示一個類
id類的唯一標示
class 代表類的全名,也就是包名+類名
-->
<bean id="helloWorld" class="cn.zju.spring.HelloWorld"></bean>
</beans>

main方法的代碼如下:

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args){
/**
* 1、啟動spring容器
* 2、從spring容器中把該對象提取出來
* 3、對象調用方法
*/
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
helloWorld.hello();
}
}

Spring容易創建對象的意義:程序員可以更加專註於業務的開發,而不用管對象的創建、銷毀等,把這些操作都交給Spring容器完成。

Spring創建對象的方式

無參構造方法

如果在配置文件中只使用id和class屬性配置bean,則默認調用類的無參構造方法進行實例化,代碼如下所示:

1
<bean id="helloWorld" class="cn.zju.spring.HelloWorld"></bean>

上述配置將調用HelloWorld類的無參構造方法來創建HelloWorld實例。

靜態工廠

有些類中提供了靜態的工廠方法返回實例,假設HelloWorldFactory類中有如下的靜態工廠方法:

1
2
3
4
5
public class HelloWorldFactory {
public static HelloWorld getInstance(){
return new HelloWorld();
}
}

在配置文件中使用factory-method屬性調用改靜態工廠方法,創建HelloWorld實例,代碼如下:

1
2
<bean id="helloWorldFactory" class="cn.zju.spring.HelloWorldFactory"></bean>
<bean id="helloWorld" class="cn.zju.spring.HelloWorldFactory" factory-method="getInstance"></bean>

實例工廠方法

  1. 提供工廠類
  2. 把工廠放到Spring容器中
  3. 在Spring容器中指定工廠類的工廠方法
  4. 在客戶端中創建對象
    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容器生命周期

    1. 啟動spring容器
    2. 創建helloWorld對象
    3. 調用helloWorld對象的init方法,init方法是由spring容器內部調用的
    4. 在客戶端提取helloWorld對象,對象調用方法
    5. 當spring容器關閉的時候,執行destroy方法:註意:前提條件:必須為單例,如果多實例,不起作用。

Spring學習1:Spring基本特性