A diferença e função de BeanFactory e FactoryBean

Prefácio

Esta pergunta é freqüentemente feita em entrevistas de primavera, então este artigo irá esclarecê-la!

Diferença, efeito

BeanFactory:

  1. A BeanFactory também é uma fábrica.Os Beans in Spring são todos produzidos e gerenciados pela BeanFactory, exceto Beans especiais, como os implementados pela FactoryBean!
  2. BeanFactory é a interface principal que implementa o contêiner IOC e suas responsabilidades incluem instanciar, localizar, configurar objetos no aplicativo e estabelecer dependências entre esses objetos.
  3. BeanFactory é uma interface que fornece a forma mais básica de contêiner IOC, que é fornecer implementação Spring das especificações do contêiner IOC, não a implementação específica do contêiner IOC, implementações específicas como DefaultListableBeanFactory, XmlBeanFactory, ApplicationContext, dos quais XmlBeanFactory é comumente usado um, esta implementação Os objetos que compõem a aplicação e as dependências entre os objetos serão descritos em XML. A classe XmlBeanFactory manterá esses metadados de configuração XML e os usará para construir um sistema ou aplicativo totalmente configurável. O relacionamento de realização é mostrado abaixo!
    Insira a descrição da imagem aqui
    Insira a descrição da imagem aqui
  4. BeanFacotry é uma fábrica relativamente primitiva na primavera. Por exemplo, XMLBeanFactory é uma BeanFactory típica.
    A BeanFactory original não pode suportar muitos plug-ins de mola, como funções AOP, aplicativos da web, etc. A interface ApplicationContext, que é derivada da interface BeanFactory, ApplicationContext contém todas as funções da BeanFactory e geralmente é recomendado ter precedência sobre a BeanFactory

FactoryBean :

FactoryBean é uma interface e um Bean. Este Bean não é um Bean simples, mas um Bean de fábrica que pode produzir ou modificar objetos. A implementação do FactoryBean é semelhante ao modo de fábrica e ao modo de modificador no modo de design. Em geral, o Spring passa O mecanismo de reflexão usa o atributo de classe do bean no xml para especificar a classe de implementação para instanciar o Bean. Em alguns casos, o processo de instanciar o Bean é mais complicado. Se você seguir a maneira tradicional, precisará fornecer muito de informações de configuração no bean no xml. A flexibilidade do método de configuração é limitada. Ele fornece uma maneira mais flexível para o contêiner IOC implementar Beans. Usar o método de codificação pode resultar em uma solução simples, ou seja, ao invés de seguir a especificação do processo BeanFactory, o FactoryBean fornece Beans no base do contêiner IOC. A realização de adicionar um modo de engenharia simples e um modo de cliente, só precisamos reescrever o método getObject após implementar a interface FactoryBean e retornar nosso Bean personalizado! Os detalhes de instanciar alguns Beans complexos são ocultados, o que traz conveniência para aplicativos de nível superior. A partir do Spring 3.0, o FactoryBean passou a suportar genéricos, ou seja, a declaração da interface foi alterada para a forma de FactoryBean, onde o valor de retorno do método isSingleton determina se o objeto retornado pela implementação atual do FactoryBean está armazenado no singleton pool, que é o cache de primeiro nível!

@Component
public class MyFactoryBean implements FactoryBean {
    
    

    @Override
    public Object getObject() throws Exception {
    
    
        A testMain = new A();
        System.out.println("----------一系列而外的定制操作-----------");
        //以直接通过getObject方法来完成定制化的Bran,无需使用BeanFactory一步一步按流程生成!
        return testMain;
    }

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

    @Override
    public boolean isSingleton() {
    
    
        return true;
    }
}

Acho que você gosta

Origin blog.csdn.net/CSDN877425287/article/details/114096631
Recomendado
Clasificación