1. 程式人生 > >spring中bean,factorybean與beanfactory

spring中bean,factorybean與beanfactory

1. 普通Bean的建立

spring 中的普通bean的建立是通過讀取配置檔案,將所有配置檔案資訊儲存到beandefinition中,在使用getbean的時候通過反射建立例項,然後再將屬性值填充。

1.1 普通bean的注入方式

1) 使用構造器注入

<bean id="person" class="framework.spring.test.Person">
    <constructor-arg index="0" value="1"/>
    <constructor-arg index="1" value="name"/>
</bean>

2) 使用setter方法注入

給屬性新增set方法注入的時候使用如下方式:

<bean id="user" class="framework.spring.test.User">
    <property name="id" value="1"/>
    <property name="name" value="name"/>
    <property name="person" ref="person"/>
</bean>

3) 使用註解方式注入

@Autowired
private
Person person;

註解可以加在屬性上,也可以加在set方法上

2. FactoryBean的建立

由於普通bean建立的時候只能通過反射,不能自定義bean的建立方式,因而如果有需要自定義bean建立方式的需要的時候,可以使用factorybean。

1)自定義factorybean

建立factorybean,spring在定義bean的時候為我們提供了factory-bean這樣一個屬性,說明這個bean是一個由工廠類建立的物件,這個物件通過指定的factory-method方法生成。

public class JDBConnectionFactory
implements DBConnectionFactory {
private String nodeName; public JDBConnectionFactory(String nodeName) { this.nodeName = nodeName; } public Connection create() { Connection connection = null; try { connection = new JDBC4Connection(nodeName, 0 ,new Properties(), "", ""); } catch (SQLException e) { e.printStackTrace(); } return connection; } }

2)通過factoryBean介面建立bean

一般情況下,Spring 通過反射機制利用 的 class 屬性指定實現類例項化 Bean ,在某些情況下,例項化 Bean 過程比較複雜,如果按照傳統的方式,則需要在 中提供大量的配置資訊。配置方式的靈活性是受限的,這時採用編碼的方式可能會得到一個簡單的方案。 Spring 為此提供了一個 org.springframework.bean.factory.FactoryBean 的工廠類介面,使用者可以通過實現該介面定製例項化 Bean 的邏輯。
FactoryBean介面有這樣幾個方法:
a) T getObject() throws Exception;
b) Class

public class PersonFactoryBean implements FactoryBean<Person>{

    public Person getObject() throws Exception {
        return new Person(0,"");
    }

    public Class<?> getObjectType() {
        return Person.class;
    }

    public boolean isSingleton() {
        return false;
    }
}

<bean id="personByFactory" class="framework.spring.test.PersonFactoryBean"/>

3. BeanFactory

BeanFactory:建立bean的工廠,BeanFactorty是一個介面,spring中所有物件的建立都圍繞著BeanFactory展開。spring中BeanFacroty的實現包括AutowireCapableBeanFactory、DefaultListableBeanFactory、XmlBeanFactory等,通常在springIOC中,會通過beanFactory建立factoryBean。BeanFactory介面中的方法包括:
這裡寫圖片描述

4. BeanFactory與FactoryBean的區別

BeanFactory是個Factory,也就是IOC容器或物件工廠,FactoryBean是個Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)來進行管理的。但對FactoryBean而言,這個Bean不是簡單的Bean,而是一個能生產或者修飾物件生成的工廠Bean,它的實現與設計模式中的工廠模式和修飾器模式類似。