spring-5-AOP模擬

1、FactoryBean與BeanFactory之間的區別

BeanFactory:是spring中底層工廠類,getBean()方法最好的解釋

FactoryBean:如果自己的類中實現了FactoryBean會實現三個方法,其中會有一個Object getObject();直接上代碼。

package com.bean;

import org.springframework.stereotype.Component;

@Component
public class TestBean {

    public void testBean(){
        System.out.println("TestBean");
    }
}

  

package com.bean;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

@Component("bean_Factory")
public class TestBeanFactory implements FactoryBean {

    public void testBeanFactory(){
        System.out.println("TestBeanFactory");
    }

    @Override
    public Object getObject() throws Exception {
        return new TestBean();
    }

    @Override
    public Class<?> getObjectType() {
        return TestBean.class;
    }
}

  

AnnotationConfigApplicationContext acc = new AnnotationConfigApplicationContext(Appconfig.class);
        TestBeanFactory testBeanFactory = (TestBeanFactory)acc.getBean("&bean_Factory"  );
        testBeanFactory.testBeanFactory();

        TestBean testBean = (TestBean)acc.getBean("bean_Factory"  );
        testBean.testBean();

  

根據以上代碼(主要測試中),我們可以看出bean_Factory和&bean_Factory返回兩種不同的bean對象,所以得出以下結論

結論:當實現了FactoryBean接口後,再容器中會註冊兩個對象,一個是getObject()方法返回的對象和自身對象。我們定義的名字@Component("xxx"),從容器中獲取的是getObject()方法返回的對象,而&xxx返回的是自身對象

爲什麼這樣設計?使用場景?

此方式用來提供給複雜的第三方,否則,第三方依賴的太多,如果是xml方式那麼將是一種災難,所以引出FactoryBean.getObject();


 

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