1.核心工厂配置类

@Component
public class HandlerContext {

private Map<String, AbstractHandler> handlerMap;

private HandlerContext() {
}

private void init(Map<String, AbstractHandler> handlerMap) {
this.handlerMap = handlerMap;
}

public AbstractHandler getInstance(String type) {
AbstractHandler handler = handlerMap.get(type);
if (handler == null) {
System.out.println("没有type为‘" + type + "’的处理器");
throw new IllegalArgumentException("not found handler for type: " + type);
}
return handler;
}

//初始化处理器
@Bean
private Map<String, AbstractHandler> initHandlerContext(Map<String, AbstractHandler> handlerMap){
this.init(handlerMap);
return this.handlerMap;
}

}

2.抽象处理父类
public abstract class AbstractHandler {

protected static final Logger log = LoggerFactory.getLogger(AbstractHandler.class);

@Autowired
protected HandlerThreadPool handlerThreadPool;
@Autowired
protected RedisTemplate redisTemplate;

public abstract String handler(ChannelHandlerContext ctx, NettyMessage message);

}

3.子类写法 需使用spring的service注解
@Service("base")
public class BaseHandler extends AbstractHandler

@Service("mls")
public class GameMLSHandler extends AbstractHandler

等等等·····

4. 使用
AbstractHandler handler = handlerContext.getInstance(message.getType());
handler.handler(ctx, message);

5.线程池数组
可根据角标指定哪一个线程去处理,可解决部分多次发送等多线程问题。
@Component
public class HandlerThreadPool {

//线程池数组
private static ExecutorService[] handlerThreadPool = new ExecutorService[5];

public HandlerThreadPool() {
for (int i = 0; i < handlerThreadPool.length; i++) {
handlerThreadPool[i] = Executors.newFixedThreadPool(1);
}
}

public ExecutorService getHandlerThread(int index){
return index > handlerThreadPool.length ? null : handlerThreadPool[index];
}

public static int getThreadSize(){
return handlerThreadPool.length;
}
}
以上的NettyMessage为自定义消息类,需根据具体业务自行编写


记一次自定义管理工厂使用spring自动装载bean的更多相关文章

  1. Spring自动装配bean

    Spring推荐面向接口编程,这样可以很好的解耦具体的实现类. CompactDisc.class 文件: public interface CompactDisc { void play(); } ...

  2. Spring 自动装配 Bean

    Spring3系列8- Spring 自动装配 Bean 1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiri ...

  3. Spring自动装配Bean详解

    1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiring ‘byType 4.      Auto-Wirin ...

  4. Spring深入浅出(二)IOC的单例 ,继承,依赖,JDBC,工厂模式以及自动装载

    IOC的单例模式--Bean Spring中的bean是根据scope来决定的. scope有4种类型: 1.singleton:单例模型,表示通过Spring容器获取的该对象是唯一的.常用并且默认. ...

  5. Spring核心技术(八)——Spring自动装载的注解

    本文针对自动装载的一些注解进行描述. 基于注解的容器配置 @Required注解 @Required注解需要应用到Bean的属性的setter方法上面,如下面的例子: public class Sim ...

  6. Spring自动装配Bean的五种方式

    在Spring中,支持 5 自动装配模式. no – 缺省情况下,自动配置是通过“ref”属性手动设定,在项目中最常用byName – 根据属性名称自动装配.如果一个bean的名称和其他bean属性的 ...

  7. Spring自动注入Bean

    通过@Autowired或@Resource来实现在Bean中自动注入的功能,但还要在配置文件中写Bean定义,下面我们将介绍如何注解Bean,从而从XML配置文件 中完全移除Bean定义的配置. 1 ...

  8. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring自动装配Bean

    除了使用 XML 和 Annotation 的方式装配 Bean 以外,还有一种常用的装配方式——自动装配.自动装配就是指 Spring 容器可以自动装配(autowire)相互协作的 Bean 之间 ...

  9. spring 自动装配 bean 有哪些方式?

    Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系.作为开发人员,我们需要告诉Spring要创建哪些bean并且如何将其装配到一起. spring中bean装配有两种方式 ...

  10. SPRING IN ACTION 第4版笔记-第二章-001-用@Autowired\@ComponentScan、@Configuration、@Component实现自动装载bean

    1. package soundsystem; import org.springframework.context.annotation.ComponentScan; import org.spri ...

随机推荐

  1. 排序算法 | JS

    1.冒泡排序 function bubbleSort(arr,order){ let len = arr.length-1,flag=true for(let i=0;(i<len)&& ...

  2. php 滑动图片验证生成

    1.话不多说,直接干货,喜欢的希望大家一键三连 <?php namespace App\Model; class VerifyImage { //浮层坐标数组 protected $tailor ...

  3. Java设计模式之策略模式(13)

    策略模式定义了一系列算法,每个算法封装起来,他们可以相互替换,且算法的变化不会影响到使用算法的客户.可以设计一个抽象类提供辅助. package WHP; public interface ICalc ...

  4. Vue.Draggable使用总结

    Draggable为基于Sortable.js的vue组件,用以实现拖拽功能. 特性 支持触摸设备 支持拖拽和选择文本 支持智能滚动 支持不同列表之间的拖拽 不以jQuery为基础 和视图模型同步刷新 ...

  5. WDA学习(22):WDA PLG,Application跳转传参

    1.15 WDA PLG,Application跳转传参 本实例Outbound Plugs页面跳转传参,URL跳转Application传参. 1.创建Component:Z_TEST_WDA_L6 ...

  6. Docker安装 Redis Stack(开发适配-提供 Redis Stack 服务器和RedisInsight可视化) (6.2.4-v2版本)

    一.使用docker安装(开发适配-提供 Redis Stack 服务器和RedisInsight) (6.2.4-v2版本) 简介 安装命令根据实际部署情况调整 版本地址:官方镜像主页 | 发布版T ...

  7. Carthage 使用介绍

    1.安装 Carthage 安装 brew install carthage 检测当前版本 carthage version 升级至最新版本 brew upgrade carthage 2.如果更新出 ...

  8. kubernetes中 pause的作用

    pause的作用 重要概念:Pod内的容器都是平等的关系,共享Network Namespace.共享文件 pause容器的最主要的作用:创建共享的网络名称空间,以便于其它容器以平等的关系加入此网络名 ...

  9. 如何保证RabbitMQ不会被重复消费?

    为什么会有重复消费? 做一个标志! 在将生产者写消息的时候,对数据做一个唯一标识.消费者在消费消息时,根据这个唯一标识做判断,如果这个唯一标识被消费过了,那么就 不消费了,如果判断结果是没有被消费过, ...

  10. CIC滤波器

    CIC滤波器是滑动平均滤波器的非常高效的迭代实现,只需要一个减法和一个加法,而滑动平均需要N-1个加法. cic滤波器相当于一个梳状滤波器y(n)=x(n)-x(n-D),H(z)=1-z-D,和一个 ...