factorybean的解釋

介紹:

一般情況下,Spring通過反射機制利用bean的class屬性指定實現類來實例化bean 。在某些情況下,實例化bean過程比較複雜,如果按照傳統的方式,則需要在<bean>中提供大量的配置信息,配置方式的靈活性是受限的,這時採用編碼的方式可能會得到一個簡單的方案。Spring爲此提供了一個org.Springframework.bean.factory.FactoryBean的工廠類接口,用戶可以通過實現該接口定製實例化bean的邏輯。
FactoryBean接口對於Spring框架來說佔有重要的地位,Spring 自身就提供了70多個FactoryBean的實現。它們隱藏了實例化一些複雜bean的細節,給上層應用帶來了便利。從Spring 3.0 開始, FactoryBean開始支持泛型,即接口聲明改爲FactoryBean<T> 的形式

實現factorybean 接口 主要有3個方法如下;

package com.quartz.job;

import org.springframework.beans.factory.FactoryBean;

public class JobFactoryBean implements FactoryBean<MyJob>{

	@Override
	public MyJob getObject() throws Exception {
		// TODO 實際factorybean 返回的值
		return null;
	}

	@Override
	public Class<?> getObjectType() {
		// TODO 返回值的class
		return MyJob.class;
	}

	@Override
	public boolean isSingleton() {
		// TODO 指定是否單列 默認是false
		return true;
	}

}
當我們使用spring  容器 獲取時比如使用註解

@Autowired JobFacotryBean jobFacoryBean 獲取時 我們獲取到的是JobFacotryBean的實例 因爲@Autowired 是按照類型來獲取的

使用@Resource 註解
@Resource JobFacotryBean jobFacoryBean 這樣的寫法是不正確的 應爲這時我們獲取的是MyJob的實例應改爲@Resource MyJob  jobFacoryBean 不然會出現注入類型錯誤

如果我們想獲取JobFacotryBean的實例需要是&符號和名字一起使用如下:

@Resource (name="&jobFacoryBean")

JobFacotryBean jobFacoryBean

這樣獲取的纔是JobFacotryBean的實例

使用getBean的方式獲取 也是一樣 獲取JobFacotryBean實例 getBean("&jobFacoryBean")

獲取泛型的實例 就是本例子中的MyJob 使用getBean("jobFacoryBean")


factorybean 和beanfactory 是不一樣的概念主要的前者代表着是一個bean  後者表示的是一個bean工廠

發佈了72 篇原創文章 · 獲贊 51 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章