Crie o hábito de escrever juntos! Este é o 4º dia da minha participação no "Nuggets Daily New Plan · April Update Challenge", clique para ver os detalhes do evento .
O falcão de tiro público está acima da torre alta e não há desvantagem em obtê-lo.
prefácio
Spring
Em , IOC
é um conceito muito importante, sua essência é a estrutura do mapa, container de armazenamento e informações do business bean. No entanto BeanFactory
, FactoryBean
a diferença entre e é um ponto de conhecimento muito importante.Neste artigo, o código-fonte será analisado e explicado.
diferença e conexão
BeanFactory
Spring
Em , todos Bean
são gerenciados por BeanFactory
(ou seja, o contêiner IOC). BeanFactory
A forma básica do contêiner é definida e a interface básica e o ciclo de vida do contêiner IOC são especificados.Também há muitas classes de implementação para BeanFactory, como , ApplicationContext
e interfaces que adicionam funções adicionais. O objeto precisa seguir a seguinte forma de ciclo de vida, e a produção é realizada através do mecanismo de reflexão.DefaultListableBeanFactory
XmlBeanFactory
BeanFactory
Bean
Bean
Em inglês, Aware
significa consciência. Você pode ver que BeanFactory
o processo do ciclo de vida inclui muitas Aware
interfaces:
A seguir estão os seguintes métodos relacionados ao ciclo de vida da BeanFactory
interface , que são amplamente utilizados no desenvolvimento de projetos, ApplicationContextAware
, eInitializingBean
.DisposableBean
BeanNameAware.setBeanName 用于设置 Bean 的名称
BeanClassLoaderAware.setBeanClassLoader 设置类加载器
BeanFactoryAware.setBeanFactory 设置 bean 工厂
ResourceLoaderAware.setResourceLoader 设置资源加载器
ApplicationEventPublisherAware.setApplicationEventPublisher 设置事件发布器
MessageSourceAware.setMessageSource 设置信息资源
ApplicationContextAware.setApplicationContext 设置应用上下文
ServletContextAware.setServletContext 设置 Servlet 上下文
BeanPostProcessor.postProcessBeforeInitialization 前置处理器
InitializingBean.afterPropertiesSet Bean 初始化操作
RootBeanDefinition.getInitMethodName 设置Bean 的初始化方法名称
BeanPostProcessor.postProcessAfterInitialization 后置处理器
DisposableBean.destroy 设置 Bean 销毁
RootBeanDefinition.getDestroyMethodName 获取 Bean 销毁的方法
复制代码
Por padrão, se você chamar diretamente o método getBean, ele retornará um objeto criado em fábrica.Se você deseja obter o próprio Bean, é necessário adicionar o símbolo & como prefixo para processamento.
FactoryBean
No entanto, em alguns casos específicos, a operação de Bean
instanciação será muito complicada, e um grande número de propriedades precisa ser configurado de acordo com seus requisitos. Neste momento Bean
, a flexibilidade de configuraçãoFactoryBean
precisa construir Bean
objetos sem seguir Bean
o fluxo do ciclo de vida . Spring
Ele fornece muitas implementações FactoryBean
por , que ocultam uma série de detalhes complexos de instanciação e trazem conveniência para aplicativos de camada superior. Desde que o Srping 3.0 FactoryBean
começou a dar suporte aos genéricos, ou seja, a declaração da interface é alterada para FactoryBean<T>
a forma de . FactoryBean
Na aplicação de , SqlSessionFactoryBean
é uma boa prática. No processo de operação do banco de dados, ele fornece SqlSession
uma Factory
.
Resumir
BeanFactory
Fornece uma especificação de contêiner Spring IOC que pode produzir e gerenciar uma interface de fábrica para beans. Mas FactoryBean
é uma forma especial de criação do bean, que não precisa seguir a especificação do container IOC, mas uma extensão do bean. Para criação e uso de objetos de bean complexos, ele pode encapsular os detalhes de criação do objeto.