A relação entre feijão e recipiente de primavera
As informações de configuração do feijão definem a implementação e as dependências do feijão. O contêiner de mola estabelece o Registro de Definição do Bean dentro do contêiner com base em várias formas de informações de configuração do feijão, depois carrega e instancia os feijões de acordo com o registro e estabelece dependências entre feijões e feijões. Finalmente, esses feijões prontos são colocados no pool de cache de feijão para obter aplicativos externos.
Este artigo apresentará em detalhes sobre o uso de métodos de codificação para configurar dinamicamente os feijões na primavera. Vamos compartilhá -los para sua referência e aprendizado. Não vou dizer muito abaixo, vamos dar uma olhada na introdução detalhada juntos.
1 DefaultListableBeanFactory
DefaultListableBeanFactory implementa a interface ConfigurableListableBeanFactory, que pode injetar dinamicamente os feijões por meio dessa classe. Para garantir que o feijão injetado também possa ser aprimorado pela AOP, precisamos implementar a interface pós -processador da fábrica do feijão BeanFactoryPostProcessor.
Feijão que requer injeção dinâmica:
classe pública BookService {bookdao bookdao; public void SetBookdao (bookdao bookdao) {this.bookdao = bookdao; } public bookdao getbookdao () {return bookdao; }}Implementando a interface pós -processador de fábrica do feijão:
@ComponentPublic Class BookServiceFactoryBean implementa BeanFactoryPostProcessor {public void postprocessBeanFactory (configurableListableBeanFactory BeanFactory) lança beansception {defaultListableBeanFactory = (defaultListyBeanFactory) BEANFACTIAL; // Definição de Bean BeandEfinitionBuilder Builder = BeandEfinitionBuilder.genericBeandEfinition (BookService.class); // Defina o Propriedade Builder.addPropertyReference ("Bookdao", "Bookdao"); // Registrar Definição de Bean Factory.RegisterBeandEfinition ("BookService1", Builder.getrawbeandEfinition ()); // Registrar o feijão Factory.Registersingleton ("BookService2", new net.deniro.spring4.dynamic.bookservice ()); }}Aqui é assumido que o bookdao foi injetado no contêiner (XML ou método de anotação).
Aqui, podemos registrar a definição de um feijão ou registrar diretamente a instância de um feijão.
Configuração:
<Contexto: Componente-Scan Base-Package = "net.deniro.spring4.dynamic" />
Testes de unidade:
BookService BookService1 = (BookService) Context.getBean ("BookService1"); AssertNotNull (BookService1); AssertNotNull (BookService1.GetBookDao ()); BookService2 = (BookService) context.getBean ("BookService2");2 tags personalizadas
Para encapsular melhor os componentes e aprimorar sua facilidade de uso, definimos componentes como rótulos.
As etapas para personalizar a tag são:
Crie BookService.xsd sob a pasta do esquema em recursos
<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns="http://www.deniro.net/schema/service" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns: Beans = "http://www.springframework.org/schema/beans" TargetNamespace = "http://www.deniro.net/schema/service" elementDefault = "qualificado". Namespace = "http://www.springframework.org/schema/beans"/> <!-Definir tag de serviço de livro-> <xsd: elemento name = "book-service"> <xsd: complextype> <xsd: complexcontent> <xsd: extension = beans: beans: beans: beansd: beanstype> <xsd: complexcontent> <xsd: extension = »" <xsd: atributo name = "dao" type = "xsd: string" use = "requerir"/> </xsd: extension> </xsd: complexContent> </xsd: complextype> </xsd: element> </xsd: esquema>
Em seguida, defina o analisador de etiqueta de serviço:
public class BookServiceDefinitionParser implementa o parse beandEfinitionParser {public beandefinition parse (elemento elemento, parsercontext parserContext) {// crie bean DefinitionBeandEfinitionBuilder Builder = BENDefinitionBuilder.GerancerBeandEfinition (BookService.Cl); // injetar atributo de tag personalizado string dao = element.getAttribute ("dao"); construtor.addPropertyReference ("bookdao", dao); // registro bean define parserContext.registerbeanComponent (New BeanComponentDefinition (construtor .getrawbeanndefinition (), "bookService")); retornar nulo; }}Em seguida, registre o analisador que você acabou de definir no espaço para nome:
classe pública BookServicenamesPaceHandler estende o nome de nome do nome do suporte {public void init () {RegisterBeandEfinitionParser ("Book-Service", New BookServEdEfinitionParser ()); }}Em seguida, crie a pasta Meta-Inf em recursos e crie Spring.Schema e Spring.Handlers, que são usados para configurar o caminho do arquivo de estrutura de documentos da tag personalizada e o analisador que analisa o espaço para nome personalizado.
Caminho do arquivo
Spring.Handlers:
http/: //www.deniro.net/schema/service=net.deniro.spring4.dynamic.bookservicenamespaceHandler
Spring.Schemas:
http/: //www.deniro.net/schema/service.xsd=schema/bookservice.xsd
Nota: O arquivo XSD deve ser colocado no Diretório de Recursos Descendentes.
Citando tags personalizadas:
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:me="http://www.deniro.net/schema/service" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.deniro.net/schema/service http://www.deniro.net/schema/service.xsd "> <bean id =" bookdao "/> <me: book-service =" bookdao "/> </bans>
Aqui, referenciamos a tag personalizada na cabeça e a nomeou "Me", e então podemos usá -la o (∩_∩) o ~
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.