首页 > 其他分享 >【Spring】FactoryBean

【Spring】FactoryBean

时间:2023-02-27 20:13:36浏览次数:50  
标签:对象 Spring Bean FactoryBean User test user

(181条消息) FactoryBean详解_MiaSanMiaRL的博客-CSDN博客_factorybean

FactoryBean也叫做Bean工厂,是用于生产Bean对象的类

FactoryBean的使用
首先我们要明确,FactoryBean也是一个Bean对象。我们如果要使用Bean工厂,可以手动实现一个实现FactoryBean接口的一个类。

@Component
public class FactoryBean_test implements FactoryBean {
@Override
public Object getObject() throws Exception {
return new User();
}

@Override
public Class<?> getObjectType() {
return User.class;
}
}
1、@Component:首先我们的Bean工厂由于也是对象的一种,所以我们要把它注册进Spring容器中

2、我们实现了FactoryBean接口

public interface FactoryBean<T> {
String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";

@Nullable
T getObject() throws Exception;

@Nullable
Class<?> getObjectType();

default boolean isSingleton() {
return true;
}
}
该接口有三个方法,其中isSingleton方法用来判断生产的Bean是不是单例的,默认实现,我们不需要手动实现。

我们需要实现getObject方法获得生产出来的Bean对象;同时还要实现getObjectType方法用于获取生产出来对象的类

使用:
在main方法中,我们依然用前面提到的方法获取Bean对象

//获取BeanDefinition对象
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
//简单的创建一个Bean
beanDefinition.setBeanClass(FactoryBean_test.class);
AnnotationConfigApplicationContext applicationContext1 = new AnnotationConfigApplicationContext();
//将BeanDefinition创建到容器对象里面去
applicationContext1.registerBeanDefinition("user",beanDefinition);
//注意:此时我们注册进Spring中的Bean有些特殊,他实现了两个实际上创建了两个Bean对象,第一个就是我们的FactoryBean_teat,
//还有一个就是我们的User对象
//此时id:&user表示的是FactoryBean_teat,id:user表示的是User对象。
注意:
我们此时传入的BeanDefinition对象会有点特殊,因为它实际上会注册进两个Bean对象,一个是我们的工厂对象,另一是我们生产出来的对象。

//获取生产出来的对象
User user1 = applicationContext1.getBean("user",User.class);
//获取工厂对象
FactoryBean_test factoryBean_test = applicationContext1.getBean("&user",FactoryBean_test.class);

标签:对象,Spring,Bean,FactoryBean,User,test,user
From: https://www.cnblogs.com/cuipengchong/p/17161684.html

相关文章

  • 【Spring】BeanFactory和FactoryBean有哪些区别
      区别说实话,他俩除了名字比较像以外,好像没有其他共同点了。「BeanFactory和FactoryBean有哪些区别?」BeanFactory是一个最基础的IOC容器,提供了依赖查找,依......
  • SpringBoot 搭建微服务初体验
    (SpringBoot搭建微服务初体验)前言大家好,微服务是现在面试中必不可少的一项技能了,掌握微服务,不仅能够加薪升职,还能在面试中,底气十足,不怯场,不怕被压薪资。所以今天就特意......
  • 【Spring】spring中创建bean的方式
    (181条消息)spring中创建bean的方式_清华大咖的博客-CSDN博客 (1)基于xml配置bean(2)使用@Component派生注解(3)使用@Configuration和@Bean注解1、常见的使用xml中set......
  • 【Spring】@Import注解
    (181条消息)@Import注解_ZmyCoder的博客-CSDN博客_@import 1、@Import注解须知@Import只能用在类上,@Import通过快速导入的方式实现把实例加入spring的IOC容器中......
  • springboot中redis使用和工具
    application.properties#Redis相关配置spring.data.redis.host=localhost#端口spring.data.redis.port=6379#reids数据库索引spring.data.redis.database=0Red......
  • springboot脱包部署
    <plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration>......
  • spring aop切面说明
    execution:处理JoinPoint的类型,例如call、execution(*android.app.Activity.on**(..)):这个是最重要的表达式,第一个*表示返回值,*表示返回值为任意类型,后面这个就是典型的......
  • springboot条件注册Condition注解
    环境识别importorg.springframework.context.annotation.Condition;importorg.springframework.context.annotation.ConditionContext;importorg.springframework.c......
  • 基于SpringBoot WebMagic爬虫爬取大乐透双色球
    大乐透网页地址:https://kjh.55128.cn/dlt-history-360.htm双色球网页地址:https://kjh.55128.cn/ssq-history-120.htm 注:程序仅用于个人兴趣爱好,不得用于商业行为,本......
  • SpringBoot项目打包部署
    转载自:https://blog.csdn.net/yw_2022/article/details/122649955========= SpringBoot项目打包在linux服务器中运行:jar类型项目会打成jar包:jar类型项目使用SpringBoo......