当前位置:   article > 正文

FactoryBean详解

factorybean

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

FactoryBean的使用 

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

  1. @Component
  2. public class FactoryBean_test implements FactoryBean {
  3. @Override
  4. public Object getObject() throws Exception {
  5. return new User();
  6. }
  7. @Override
  8. public Class<?> getObjectType() {
  9. return User.class;
  10. }
  11. }

1、@Component:首先我们的Bean工厂由于也是对象的一种,所以我们要把它注册进Spring容器中

2、我们实现了FactoryBean接口

  1. public interface FactoryBean<T> {
  2. String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";
  3. @Nullable
  4. T getObject() throws Exception;
  5. @Nullable
  6. Class<?> getObjectType();
  7. default boolean isSingleton() {
  8. return true;
  9. }
  10. }

该接口有三个方法,其中isSingleton方法用来判断生产的Bean是不是单例的,默认实现,我们不需要手动实现。

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

使用:

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

  1. //获取BeanDefinition对象
  2. AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
  3. //简单的创建一个Bean
  4. beanDefinition.setBeanClass(FactoryBean_test.class);
  5. AnnotationConfigApplicationContext applicationContext1 = new AnnotationConfigApplicationContext();
  6. //将BeanDefinition创建到容器对象里面去
  7. applicationContext1.registerBeanDefinition("user",beanDefinition);
  8. //注意:此时我们注册进Spring中的Bean有些特殊,他实现了两个实际上创建了两个Bean对象,第一个就是我们的FactoryBean_teat,
  9. //还有一个就是我们的User对象
  10. //此时id:&user表示的是FactoryBean_teat,id:user表示的是User对象。

注意:

我们此时传入的BeanDefinition对象会有点特殊,因为它实际上会注册进两个Bean对象,一个是我们的工厂对象,另一是我们生产出来的对象。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/624871
推荐阅读
相关标签
  

闽ICP备14008679号