Visão geral e instanciação do bean-spring

Uma nota

O desenvolvimento do springboot é mais popular agora, mas muitos desenvolvedores ignoram o fato de o springboot ser um subprojeto derivado da primavera e não entender como a primavera brinca com o springboot.É possível jogar com o springboot com apenas alguns dias de treinamento e artigos? A resposta definitivamente não é boa. Se você quer entender o springboot em profundidade, deve conhecer a primavera. A fundação é muito importante. Você não diz nada mais do que importante; os artigos básicos do autor e o entendimento conceitual da primavera também têm um propósito muito importante: Para se preparar para a análise do código-fonte posteriormente, se você for ao código-fonte imediatamente, acredito que muitas pessoas se envolverão nele e não sabem a verdade; portanto, o aprendizado honesto é a única maneira de melhorar a tecnologia. Desenvolvedores ou alunos interessados ​​podem seguir minha coluna de sping.

Introdução a dois feijões

Como o artigo anterior já falou sobre o pacote de beans e os conceitos principais, ele não será repetido. O contêiner do IOC da primavera pode acomodar um ou mais beans .Os beans são criados com o fornecimento de metadados de configuração.Os metadados de configuração também foram mencionados no artigo anterior.O método de configuração original é xml.

A definição desses beans realmente corresponde ao Objeto de Definição de Bean . O código-fonte a seguir é uma frase: BeanDefinition (interface) é uma instância de um bean, que possui valores de atributos, valores de parâmetros de construção e informações mais detalhadas, fornecidas por seus implementadores específicos.

Uma BeanDefinition descreve uma instância de bean, que possui valores de propriedade, valores de argumento do construtor
e informações adicionais fornecidas por
implementações concretas.

Exemplos de metadados para BeanDefinition:

  1. Ciclo e escopo da declaração do bean (scop, retornos de chamada do ciclo de vida)
  2. Nome da classe qualificada para o pacote: geralmente o nome completo da classe real
  3. A colaboração mútua direta depende do contêiner.
  4. Configure outras informações ao criar o objeto, como usar o bean para gerenciar o conjunto de conexões, limitar o tamanho do conjunto de conexões etc.

Os metadados são geralmente convertidos em atributos :

  1. classe (nome completo do bean)
  2. nome (o nome do bean)
  3. escopo
  4. argumentos construtores
  5. propriedades
  6. modo de ligação automática (modo de configuração automática)
  7. modo de inicialização lenta
  8. método de inicialização (método de inicialização do bean)
  9. método de destruição (método de destruição de feijão)

Além disso, você também pode configurar os metadados através do método registerSingleton e do método registerBeanDefinition através do implementador ApplicationContext (como usar GetBeanFactory () para obter o DefaultListableBeanFactory), mas esse método não é comum, geralmente usando xml

Nomeação de três feijões

Cada bean geralmente possui uma ou mais identidades, usando aliases de bean, etc., mas o contêiner deve ter um identificador exclusivo ao gerenciar o bean. Os metadados geralmente são configurados com base em XML, e <bean>os atributos id e name de um elemento geralmente representam o identificador exclusivo de um bean. regra de nomeação é a primeira letra depois de letras ou números em minúsculas, como o uso da corcunda userDao,userService . Geralmente, é possível não especificar o nome do bean. O contêiner de mola gerará automaticamente um identificador exclusivo para o bean. No entanto, se você quiser se referir ao bean por nome, deverá encontrar o nome usando o elemento ref ou a pesquisa de estilo do Localizador de Serviço.

Quatro aliases

Os aliases geralmente são usados ​​em projetos grandes.Por exemplo, quando o sistema e o subsistema principal são integrados, um bean é chamado fromName no mesmo contêiner e o alias aponta para toName.Exemplos:

<alias name="fromName" alias="toName"/>

Instanciação de cinco feijões

Na verdade, existem três maneiras de instanciar beans. A primeira é usar o elemento bean diretamente. Após a inicialização do contêiner, você pode obter diretamente a instância do bean. Isso não é diferente do novo objeto usual, mas, por padrão, a instância do bean do contêiner. Os exemplos obtidos após a conversão são casos únicos. O segundo é usar static factory-method(modo estático de fábrica). O terceiro é factory-method(padrão de fábrica da instância). Os segundo e terceiro métodos não são muito comuns: o contêiner chamará o método fatory para instanciar o bean durante a inicialização e o método fatory chamará o método createInstance na fábrica.

Se a diferença é a classe interna, use $ para distinguir, como com.youku1327. Animal$$dog

5.1 Use o construtor para instanciar o bean

O exemplo é o seguinte, algumas pessoas que usam a estrutura de primavera para desenvolver devem ser muito familiares, geralmente usamos essa maneira para instanciar beans

	<bean id="iocService" class="com.youku1327.ioc.service.IocService">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

5.2 Use o método estático de fábrica para instanciar beans

fábrica estática segue, o presente exemplo fatory-método é a sua própria fábrica estático (você pode colocar outras instâncias nova estática dentro da fábrica), mas deve ser uma declaração de tipo de método Stati C.

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 13:55
 */
public class StaticBeanService {

    private static StaticBeanService staticBeanService = new StaticBeanService();

    // other properties

    private StaticBeanService() {}

    public static StaticBeanService createInstance() {
        // add your properties
        return staticBeanService;
    }

}

A configuração é a seguinte:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- static factory method services -->

    <bean id="staticBeanService" class="com.youku1327.bean.entity.StaticBeanService" factory-method="createInstance">

    </bean>
    
</beans>

5.3 Use o método factory de instância para instanciar beans

O padrão de fábrica instanciado é muito semelhante ao padrão de fábrica estático; a diferença é se o método de criação de uma instância usa a palavra-chave estática . O carro nessa instância deve realmente ser uma interface e, em seguida, implementar a interface por meio de uma classe de implementação específica (como Lamborghini Car, BMW car etc.) e, em seguida, usar o método createCarInstance correspondente no Carfactory para configurar o bean correspondente em xml. Um exemplo simples de implementação é o seguinte:

As entidades são as seguintes:

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 14:58
 */
public class Car {

    private String carName;
    private String color;

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

A fábrica de instanciação é a seguinte:

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 15:00
 */
public class CarFactory {

    private static Car car = new Car();

    private CarFactory(){

    }

    public Car createCarInstance(){
        return car;
    }
}

A configuração é a seguinte:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- the factory bean, which contains a method called createInstance() -->
    <bean id="carFactory" class="com.youku1327.bean.factory.CarFactory">
        <!-- inject any dependencies required by this locator bean -->
    </bean>

    <!-- the bean to be created via the factory bean -->
    <bean id="car" factory-bean="carFactory" factory-method="createCarInstance"/>


</beans>

Seis documentos de referência

Container COI

[O código-fonte do github deste artigo está vinculado no final do artigo da conta pública].

Acho que você gosta

Origin www.cnblogs.com/zszxz/p/12696944.html
Recomendado
Clasificación