美文网首页
@Bean与工厂模式

@Bean与工厂模式

作者: supremecsp | 来源:发表于2021-01-24 14:02 被阅读0次

之前提到过几种工厂模式的变种,今天再介绍一种利用@Bean和Map来实现工厂模式的方法
首先要有一个抽象类/接口

public abstract class BaseNoticeHandler<T> {
    
    public abstract T getMessage(String data);

    /**
     * topic 为该处理器绑定的topic
     * @return
     */
    public abstract String topic();
}

然后基于此接口得到两个实现类(实现类交由IOC容器托管)

@Component
public class BaseNoticeHandlerTest1 extends BaseNoticeHandler<String> {
    @Override
    public String getMessage(String data) {
        return "BaseNoticeHandlerTest1";
    }

    @Override
    public String topic() {
        return "BaseNoticeHandlerTest1";
    }
}

@Component
public class BaseNoticeHandlerTest2 extends BaseNoticeHandler<String> {
    @Override
    public String getMessage(String data) {
        return "BaseNoticeHandlerTest2";
    }

    @Override
    public String topic() {
        return "BaseNoticeHandlerTest2";
    }
}

然后设计配置类,使用@bean对配置类进行初始化工厂,参数Autowired和List是重点

@Component
public class NoticeConfiguration {

    @Bean(name = "noticeFactory", initMethod = "init")
    public NoticeFactory noticeFactoryStartup(@Autowired(required = false) List<BaseNoticeHandler> handlers) {
        NoticeFactory noticeFactory = new NoticeFactory(handlers);
        return noticeFactory;
    }
}

最后创建工厂类,将数据填充进Map

public class NoticeFactory {

    private Map<String,BaseNoticeHandler> map;

    private List<BaseNoticeHandler> handlers;

    
    public NoticeFactory(List<BaseNoticeHandler> handlers) {
        this.handlers = handlers;
    }
    
    public void init(){
        if(handlers!=null){
            map= new HashMap<>();
            handlers.forEach(e->{
                map.put(e.topic(),e);
            });
        }
    }
}

这样就可以根据不同的topic拿到相应的BaseNoticeHandler了

相关文章

  • 设计模式

    设计模式 工厂模式生成bean 工厂模式分为静态工厂和实例工厂 静态工厂: 实例工厂

  • @Bean与工厂模式

    之前提到过几种工厂模式的变种,今天再介绍一种利用@Bean和Map来实现工厂模式的方法首先要有一个抽象类/接口 然...

  • 成为Java顶尖程序员,先过了下面问题!(十)

    十、设计模式与重构 1.你能举例几个常见的设计模式 1)单例模式 (Spring Bean)2)抽象工厂模式和工厂...

  • 设计模式---创建型

    设计模式创建型--5种 单例----创建线程安全类工厂----创建bean工厂抽象工厂----创建bean工厂的工...

  • 【spring-原理】

    一、关键词说明 BeanFactory:bean工厂,采用工厂模式,用于生产bean的 ApplicationCo...

  • spring详解(四)

    容器中的工厂Bean: 此处的工厂Bean与前面介绍的实例工厂方法创建Bean、静态工厂创建Bean有所区别: 前...

  • 实现FactoryBean接口在Spring IOC容器中的配置

    工厂Bean: 工厂 Bean 与普通 Bean 不通;其返回的对象不是指定类的一个实例,而是该工厂 Bean 的...

  • Spring核心API介绍

    BeanFactory是用于访问Spring Bean容器的根接口,典型的工厂模式,用于生产Bean的一个Bean...

  • Spring 设计模式

    单例模式:Spring Bean 默认都是单例的。 工厂模式:Spring 主要作用之一就是对Bean的管理,所有...

  • 说说spring用了哪些设计模式

    单例模式:Spring 中的 Bean 默认情况下都是单例的。无需多说。工厂模式:工厂模式主要是通过 BeanFa...

网友评论

      本文标题:@Bean与工厂模式

      本文链接:https://www.haomeiwen.com/subject/iadmzktx.html