Spring源碼分析(四) -- Spring中的FactoryBean

FactoryBean 定義

public interface FactoryBean<T> {
    //返回產生的對象
	@Nullable
	T getObject() throws Exception;
	//返回產生的對象類型
	@Nullable
	Class<?> getObjectType();
	//是否爲單例對象 true 單例 false 原型
	default boolean isSingleton() {
		return true;
	}
}
複製代碼
  • FactoryBean是一個泛型類的接口
  • FactoryBean產生的對象默認是單例的

FactoryBean 的使用

Service 類

public interface IService {
	void service();
}

public class IndexService implements IService {
	@Override
	public void service() {
		System.out.println("service");
	}
}
複製代碼

FactoryBeanTest 類

@Component
public class FactoryBeanTest implements FactoryBean{
	@Override
	public Object getObject() throws Exception {
		return new IndexService();
	}

	@Override
	public Class<?> getObjectType() {
		return IndexService.class;
	}
}
複製代碼

Appconfig 類

@Configuration
@ComponentScan("com.ktcatv")
public class Appconfig {
}
複製代碼

Test 類

public class Test {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext configApplicationContext = new AnnotationConfigApplicationContext(Appconfig.class);
        //注意若是直接使用名字不帶 & 返回的是getObject建立的對象
        //若是帶了 & 返回的是FactoryBean自己
        //因此FactoryBean會建立兩個bean
		IService service = (IService) configApplicationContext.getBean("factoryBeanTest");
		service.service();
		Object bean = configApplicationContext.getBean("&factoryBeanTest");
		System.out.println(bean);

	}
}
複製代碼
相關文章
相關標籤/搜索