傳智播客spring學習,實例化bean的方式及Bean的作用域

       今天繼續學習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容器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章