Spring之【详解FactoryBean】

目录

FactoryBean接口

通过FactoryBean创建Bean对象

如何获取FactoryBean中getObject方法创建的Bean

如何获取FactoryBean本身

源码分析

beanDefinitionMap

singletonObjects

factoryBeanObjectCache

FACTORY_BEAN_PREFIX

BeanFactory

BeanFactoryUtils#isFactoryDereference

看看Spring自己是怎么获取FactoryBean对象


FactoryBean接口

提供了三个方法

  • 方法一:返回由工厂管理的Bean实例对象
  • 方法二:返回Bean实例对象的类型
  • 方法三:Bean是否为单例,默认为单例

通过FactoryBean创建Bean对象

  • 定义一个普通的Java类
java 复制代码
package spring.demo;

public class Cat {
}
  • 定义一个组件实现FactoryBean接口
java 复制代码
package spring.demo;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

@Component
public class CatFactoryBean implements FactoryBean<Cat> {
    @Override
    public Cat getObject() throws Exception {
        return new Cat();
    }

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

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

如何获取FactoryBean中getObject方法创建的Bean

通过beanName获取

java 复制代码
package spring.demo;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class AppMain {
    public static void main(String[] args) {
        // 容器启动
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        // 通过beanName获取
        Object bean = applicationContext.getBean("catFactoryBean");
        System.out.println(bean);
    }
}

如何获取FactoryBean本身

通过&+beanName获取

java 复制代码
package spring.demo;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class AppMain {
    public static void main(String[] args) {
        // 容器启动
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        // 通过&+beanName获取
        Object bean = applicationContext.getBean("&catFactoryBean");
        System.out.println(bean);
    }
}

源码分析

beanDefinitionMap

singletonObjects

factoryBeanObjectCache

FACTORY_BEAN_PREFIX

BeanFactory

BeanFactoryUtils#isFactoryDereference

看看Spring自己是怎么获取FactoryBean对象

相关推荐
暮色妖娆丶42 分钟前
SpringBoot 启动流程源码分析 ~ 它其实不复杂
spring boot·后端·spring
消失的旧时光-194343 分钟前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
BD_Marathon43 分钟前
设计模式——依赖倒转原则
java·开发语言·设计模式
BD_Marathon1 小时前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
Coder_Boy_1 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
css趣多多1 小时前
add组件增删改的表单处理
java·服务器·前端
雨中飘荡的记忆1 小时前
Spring Batch实战
java·spring
Java后端的Ai之路1 小时前
【Spring全家桶】-一文弄懂Spring Cloud Gateway
java·后端·spring cloud·gateway
devmoon1 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
野犬寒鸦1 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习