今天繼續學習Spring,黎老師對Spring研究比較透徹,講課思路很清晰,認真聽講很容易理解。黎老師對Spring中比較重要的部分都進行了講解,實例化Spring容器的方式,實例化bean的方式,Bean的作用域等。並進行了舉例,通過對Spring和以前項目的學習,在項目中可以使用Sping,使項目功能的實現更簡單,遵循MVC模式。
使用Spring需要的jar
可以到http://www.springsource.org/download下載spring,然後進行解壓縮,在解壓目錄中找到下面jar文件,拷貝到類路徑下
dist/spring.jar
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
beans.xml 的配置模板
<?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">
.....
</beans>
該配置模版可以從spring的參考手冊或spring的例子中得到。配置文件的取名可以任意,文件可以存放在任何目錄下,但考慮到通用性,一般放在類路徑下。
實例化Spring容器常用的兩種方式:
方法一:
在類路徑下尋找配置文件來實例化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
方法二:
在文件系統路徑下尋找配置文件來實例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d://beans.xml“});
一般使用第一種方式,Spring的配置文件可以指定多個,可以通過String數組
傳入。
當spring容器啓動後,因爲spring容器可以管理bean對象的創建,銷燬等生命
週期,所以我們只需從容器直接獲取Bean對象就行,而不用編寫一句代碼來創建
bean對象。從容器獲取bean對象的代碼如下:
ApplicationContext ctx = new ClassPathXmlApplicationContext(“beans.xml”);
OrderService service = (OrderService)ctx.getBean("personService");
三種實例化bean的方式:
1.使用類構造器實例化
<bean id=“orderService" class="cn.itcast.OrderServiceBean"/>
2.使用靜態工廠方法實例化
<bean id="personService" class="cn.itcast.service.OrderFactory" factory-method="createOrder"/>
public class OrderFactory {
public static OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
3.使用實例工廠方法實例化:
<bean id="personServiceFactory" class="cn.itcast.service.OrderFactory"/>
<bean id="personService" factory-bean="personServiceFactory" factory-method="createOrder"/>
public class OrderFactory {
public OrderServiceBean createOrder(){
return new OrderServiceBean();
}
}
Bean的作用域
.singleton (單例)
在每個Spring IoC容器中一個bean定義只有一個對象實例。默認情況下會在容器啓動時初始化bean,但我們可以指定Bean節點的lazy-init=“true”來延遲初始化bean,這時候,只有第一次獲取bean會才初始化bean。如:
<bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true"/>
如果想對所有bean都應用延遲初始化,可以在根節點beans設置default-lazy-init=“true“,如下:
<beans default-lazy-init="true“ ...>
實際應用中不把這個屬性設置爲true.
.prototype (原型)
每次從容器獲取bean都是新的對象。每次調用getBean方法,都獲取新的實例。
調用調用getBean方法時 bean才實例化
.request
.session
.global session
在配置文件中指定Bean的初始化方法和銷燬方法
<bean id="xxx" class="cn.itcast.OrderServiceBean" init-method="init" destroy-method="close"/>
Bean實例化後 ,就會執行init方法, Spring容器通過反射機制來調用。
AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
ctx.close();//正常關閉spring容器。