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();

posted @ 2019-07-04 16:38  为了WZJ  阅读(289)  评论(0编辑  收藏  举报