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:
- Ciclo e escopo da declaração do bean (scop, retornos de chamada do ciclo de vida)
- Nome da classe qualificada para o pacote: geralmente o nome completo da classe real
- A colaboração mútua direta depende do contêiner.
- 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 :
- classe (nome completo do bean)
- nome (o nome do bean)
- escopo
- argumentos construtores
- propriedades
- modo de ligação automática (modo de configuração automática)
- modo de inicialização lenta
- método de inicialização (método de inicialização do bean)
- 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
[O código-fonte do github deste artigo está vinculado no final do artigo da conta pública].