Spring中的Bean

能夠把Spring容器看作一個大型的工廠,而Spring容器中的Bean就是該工廠的產品java

Spring容器支持兩種格式的配置文件,分別爲Properties文件格式和XML文件格式。spring

bean的配置數組

一個<bean>元素中包含不少屬性,具體以下。session

  id:是一個Bean的惟一 標識符, Spring容器對Bean的配置、管理都經過該屬性來完成app

  name:Spring容器一樣能夠經過此屬性對容器中的Bean進行配置和管理,name屬性中能夠爲Bean指定多個名稱,每一個名稱之間用逗號或分號隔開(因爲Bean的id屬性在Spring容器中是惟一的,若是想給Bean添加別名函數

或者想使用些不合法的XML字符,如「/」,就能夠經過name屬性進行設定)post

 class:該屬性指定了Bean的具體實現類,它必須是一個完整的類名,使用類的全限定名。spa

scope:用來設定Bean實例的做用域,其屬性值有singleton(單例)、prototype(原型)、request.session和global Session。其默認值是singletonprototype

constructor arg: bean 元素的子元素,可使用此元素傳人構造參數進行實例化。該元素的index屬性指定構造參數的序號(從0開始),type屬性指定構造參數的類型,其參數值能夠經過ref屬性或者value 屬性直接指定,也能夠經過ref 或value 元素指定3d

數值能夠經過ref屬性或者value 屬性直接指定,也能夠經過ref 或value素指定

property:bean元素的子元素.用於調用Bean實例中的Setter方法完成屬性賦值從而完成依賴注入。該元素的name屬性指定Bean實例中的相應屬性名,屬性值可經過ref或value屬性直接指定。

ref:property、constructor-arg等元素的子元素,該元素中的 bean屬性用於指定對Bean工廠中某個Bean實例的引用。
value: property 、constructor-arg等元素的子元素,用來直接指定一個 常量值。
list::用於封裝List或數組類型的依賴注人。
set:用於封裝Set類型屬性的依賴注人。
map:用於封裝Map類型屬性的依賴注人。
entry::map元素的子元素,用於設置一一個鍵值對。其key屬性指定字符串類型的鍵值,ref或value 子元素指定其值。
在配置文件文件中,一般一個普通Bean只須要定義Id(或者name)和class兩個屬性便可,定義Bean的方式以下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    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-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <bean id="bean" class="cn.itcast.bean"></bean>
</beans>

 

 Bean的實例化

在面向對象的程序中,要想使用某個對象,就須要先實例化這個對象。在Spring中,實例化Bean有三種方式,分別爲構造器實例化、靜態工廠實例化和實例化工廠方式實例化。

構造器實例化   構造器實例化是指Spring容器經過Bean對應的類中默認的構造函數來實例化Bean。

1.Bean.java

package cn.itcast.instance.controller
public class Bean{
}

 

 2.Bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    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-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <bean id="bean" class="cn.itcast.instance.countroller.Bean"></bean>
</beans>

 

 3.InstanceTest.java

public class InstanceTest{
@Test
  public void   Test{
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 

}}

 

 靜態工廠方式實例化

1.MyBeanFactory.java

package cn.itcast.instance.static_factory
 public class MyBeanFactory{
    public static Bean createBean(){
      return new Bean;
}

}

 

 2.Bean.xml

 

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    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-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <bean id="bean" class="cn.itcast.instance.static_factory.MyBeanFactory"
     factory-method = "createBean"></bean>
</beans>

 

 

 3.InstanceTest.java

public class InstanceTest{
@Test
  public void   Test{
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 

}}

 

實例工廠方式實例化

 1.MyBeanFactory.java

package cn.itcast.instance.static_factory
 public class MyBeanFactory{
    public Bean createBean(){
      return new Bean;
}

}

 

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    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-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <bean id="MyBeanFactory" class="cn.itcast.instance.factory.MyBeanFactory"/>
    <bean id = "bean" factory-bean = "myBeanFactory"
factory-method = "createBean"></bean>
</beans>

 

 3.InstanceTest.java

public class InstanceTest{
@Test
  public void   Test{
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 

}}

 

 Bean的做用域

1.singleton單例模式,使用singleton定義的Bean在Spring容器中將只有一個實例,也就是說,不管有多少個Bean引用它,始終指向同一個對象。這也是spring容器默認的做用域。

2.prototype原型模式.每次經過Spring容器獲取的prototype定義的Bean時,容器都將建立一個新的Bean實例。

3.request::在一-次HTTP請求中,容器會返回該Bean的同一個實例。而對不一樣的HTTP請求則會產生一個新的Bean, 並且該Bean僅在當前HTTP Request 內有效。

4.sessionsession: 在一一次HTTP Session中,容器會返回該Bean的同一個實例。而對不一樣的HTTP請求則會產生一個新的Bean,並且該Bean僅在當前HTTP Session內有效。

5.globalSession在-個全局的HTTP Session中,容器會返回該Bean 的同一個實例。僅在使用protlet context 時有效。

 Bean的生命週期

spring容器能夠管理singleton做用域下Bean的生命週期,在此做用域下,Spring可以精確的知道該Bean什麼時候被建立,什麼時候初始化完成,以及什麼時候被銷燬,而對於prototype做用

域的Bean,spring只負責建立,當容器建立了Bean實例後,Bean的實例就交給客戶端代碼來管理,spring容器不在跟蹤其生命週期

 

 

 

 

(1) Spring 實例化Bean。

(2)利用依賴注人來配置Bean中的全部屬性值。

(3)若是Bean實現了BeanNameAware接口,則Spring調用Bean的setBeanName()方法傳入當前Bean的ID值。

(4)若是Bean實現了BeanFactoryAware接口,則Spring調用setBeanFactory()方法傳入當前工廠實例的引用。.

(5)若是Bean實現了ApplicationContextAware接口,則Spring調用setApplicationContext()方法傳入當前ApplicationContext實例的引用。

(6)若是Bean實現了BeanPostProcessor 接口,則Spring 會調用postProcessBeforeInitialzation()方法。

(7)若是Bean實現了InitializingBean 接口,則Spring會調用afterpropertiesSet()方法。

(8)若是在配置文件中經過init-method屬性指定了初始化方法,則調用該初始化方法。

(9)若是Bean實現了BeanPostProcessor 接口,則Spring 會調用postProcessAfterInitialization()方法。

(10)此時, Bean實例化完成,就能夠被使用了,它將一直存在於Spring容器中,直到被銷燬。

(11)若是Bean實現了DisposableBean接口,則Spring會調用destory()方法。

(12)若是在配置文件中經過destory-method屬性指定了Bean的銷燬方法,則可調用該方法。

相關文章
相關標籤/搜索