@NotNull和@NonNull的区别

@NotNull用在Bean的字段注解上,它是 JSR303(Bean的校验框架)的注解。在controller的方法中,验证入参的属性在运行时是否为空,如果为空,则注解中的错误提示信息会保存到result中。

@NonNull用在方法或构造函数的参数上,它是JSR 305(缺陷检查框架)的注解。@NonNull会生成一个空值检查语句,当代码检查(静态检查)有空值时会给出一个风险警告运行时不报任何警告,根据实际值的情况运行时可能出现空指针异常。 目前这个注解只有IDEA支持。实际好多静态扫描工具中有此注解符号。

/** * 注册广播事件处理器(带死信队列配置) * * @param topic 订阅的主题名称 * @param handler 事件处理器实例 * @param executor 业务处理线程池 * @param dlqConfig 死信队列配置 */ public void registerBroadcast(@Nonnull String topic, @Nonnull EventHandler handler, @Nonnull ExecutorService executor, @Nonnull DLQConfig dlqConfig) { String groupId = idGenerator.createGroupId(topic); registerUnicast(topic, groupId, handler, executor, null, dlqConfig); } /** * 注册处理广播事件的handler groupId使用UUID随机生成,确保唯一性。 * * @param topic 主题 * @param handler 事件处理类 * @param executorService 上层传递的处理业务的线程池 * @param partitionAssignorMode 分区分配策略 */ @Override public void registerBroadcast(@Nonnull String topic, @Nonnull EventHandler handler, @Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode) { String groupId = idGenerator.createGroupId(topic); registerUnicast(topic, groupId, handler, executorService, partitionAssignorMode); } /** * 注册广播事件处理器(自定义分区策略+死信队列) * * @param topic 订阅的主题名称 * @param handler 事件处理器实例 * @param executorService 业务处理线程池 * @param partitionAssignorMode 分区分配策略 * @param dlqConfig 死信队列配置 */ public void registerBroadcast(@Nonnull String topic, @Nonnull EventHandler handler, @Nonnull ExecutorService executorService, @Nonnull PartitionAssignorMode partitionAssignorMode, @Nonnull DLQConfig dlqConfig) { String groupId = idGenerator.createGroupId(topic); registerUnicast(topic, groupId, handler, executorService, partitionAssignorMode, dlqConfig); } /** * 注册处理单播事件的handler 一个topic对应一个consumerId * * @param topic 主题 * @param groupId 消费者组Id,在同一个组里的消费者实现单播消费 * @param handler 事件处理类 * @param executor 上层传递的用于业务处理的线程池 */ @Override public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler, @Nonnull ExecutorService executor) { registerUnicast(topic, groupId, handler, executor, (PartitionAssignorMode) null); } /** * 注册单播事件处理器(带死信队列配置) * * @param topic 订阅的主题名称 * @param groupId 消费者组ID * @param handler 事件处理器实例 * @param executor 业务处理线程池 * @param dlqConfig 死信队列配置 */ public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler, @Nonnull ExecutorService executor, @Nonnull DLQConfig dlqConfig) { registerUnicast(topic, groupId, handler, executor, null,dlqConfig); } /** * 注册处理单播Topic消息的handler, * * @param topic 主题 * @param groupId 消费者组Id * @param handler 事件处理类 * @param executorService 上层传递的处理业务的线程池 * @param partitionAssignorMode 分区分配策略 */ @Override public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler, @Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode) { partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); register(topic, groupId, handler, executorService, partitionAssignorMode); } /** * 注册单播事件处理器(自定义分区策略+死信队列) * * @param topic 订阅的主题名称 * @param groupId 消费者组ID * @param handler 事件处理器实例 * @param executorService 业务处理线程池 * @param partitionAssignorMode 分区分配策略 * @param dlqConfig 死信队列配置 */ public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler, @Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode, @Nonnull DLQConfig dlqConfig) { partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); EventHandler wrappedHandler = new DLQEventHandlerWrapper(handler, dlqConfig, topic,this); register(topic, groupId, wrappedHandler, executorService, partitionAssignorMode); } /** * 注册处理广播Topic消息的无业务线程池的Handler * * @param topic 主题 * @param handler 事件处理类 * @param partitionAssignorMode 分区分配策略 */ @Override public void registerBroadcastWithoutThreadPool(@Nonnull String topic, @Nonnull EventHandler handler, PartitionAssignorMode partitionAssignorMode) { String groupId = idGenerator.createGroupId(topic); registerUnicastWithoutThreadPool(topic, groupId, handler, partitionAssignorMode); } /** * 注册无线程池的广播处理器(自定义分区策略+死信队列) * * @param topic 订阅的主题名称 * @param handler 事件处理器实例 * @param partitionAssignorMode 分区分配策略 * @param dlqConfig 死信队列配置 */ public void registerBroadcastWithoutThreadPool(@Nonnull String topic, @Nonnull EventHandler handler, @Nonnull PartitionAssignorMode partitionAssignorMode, @Nonnull DLQConfig dlqConfig) { String groupId = idGenerator.createGroupId(topic); registerUnicastWithoutThreadPool(topic, groupId, handler, partitionAssignorMode, dlqConfig); } /** * 注册处理单播Topic消息的无业务线程池的Handler * * @param topic 主题 * @param groupId 消费者组 * @param handler 事件处理类 * @param partitionAssignorMode 分区分配策略 */ @Override public void registerUnicastWithoutThreadPool(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler, PartitionAssignorMode partitionAssignorMode) { partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); register(topic, groupId, handler, null, partitionAssignorMode); } /** * 注册无线程池的单播处理器(自定义分区策略+死信队列) * * @param topic 订阅的主题名称 * @param groupId 消费者组ID * @param handler 事件处理器实例 * @param partitionAssignorMode 分区分配策略 * @param dlqConfig 死信队列配置 */ public void registerUnicastWithoutThreadPool(@Nonnull String topic, @Nonnull String groupId, @Nonnull EventHandler handler, @Nonnull PartitionAssignorMode partitionAssignorMode, @Nonnull DLQConfig dlqConfig) { partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); // 包装Handler,添加DLQ逻辑 EventHandler wrappedHandler = new DLQEventHandlerWrapper(handler, dlqConfig, topic,this); // 调用核心注册(executorService传null,无线程池) register(topic, groupId, wrappedHandler, null, partitionAssignorMode); }以上是我已经完成带死信重载的注册方法,请仿照我的方法修改后续注册方法 @Override public <T> void registerBroadcastGenerically(@Nonnull String topic, @Nonnull GenericEventHandler<T> handler, @Nonnull ExecutorService executor, @NonNull Class<T> clazz) { String groupId = idGenerator.createGroupId(topic); registerUnicastGenerically(topic, groupId, handler, executor, clazz); } /** * 注册处理广播事件的handler groupId使用UUID随机生成,确保唯一性。 * * @param topic 主题 * @param handler 事件处理类 * @param executorService 上层传递的处理业务的线程池 * @param partitionAssignorMode 分区分配策略 */ @Override public <T> void registerBroadcastGenerically(@Nonnull String topic, @Nonnull GenericEventHandler<T> handler, @Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) { String groupId = idGenerator.createGroupId(topic); registerUnicastGenerically(topic, groupId, handler, executorService, partitionAssignorMode, clazz); } /** * 注册处理单播事件的handler 一个topic对应一个consumerId * * @param topic 主题 * @param groupId 消费者组Id,在同一个组里的消费者实现单播消费 * @param handler 事件处理类 * @param executor 上层传递的用于业务处理的线程池 */ @Override public <T> void registerUnicastGenerically(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler<T> handler, @Nonnull ExecutorService executor, @NonNull Class<T> clazz) { registerUnicastGenerically(topic, groupId, handler, executor, null, clazz); } /** * 注册处理单播Topic消息的handler, * * @param topic 主题 * @param groupId 消费者组Id * @param handler 事件处理类 * @param executorService 上层传递的处理业务的线程池 * @param partitionAssignorMode 分区分配策略 */ @Override public <T> void registerUnicastGenerically(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler<T> handler, @Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) { partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); register(topic, groupId, handler, executorService, partitionAssignorMode, clazz, SerializeEnum.JSON); } /** * 注册处理广播Topic消息的无业务线程池的Handler * * @param topic 主题 * @param handler 事件处理类 * @param partitionAssignorMode 分区分配策略 */ @Override public <T> void registerBroadcastWithoutThreadPoolGenerically(@Nonnull String topic, @Nonnull GenericEventHandler<T> handler, PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) { String groupId = idGenerator.createGroupId(topic); registerUnicastWithoutThreadPoolGenerically(topic, groupId, handler, partitionAssignorMode, clazz); } /** * 注册处理单播Topic消息的无业务线程池的Handler * * @param topic 主题 * @param groupId 消费者组 * @param handler 事件处理类 * @param partitionAssignorMode 分区分配策略 */ @Override public <T> void registerUnicastWithoutThreadPoolGenerically(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler<T> handler, PartitionAssignorMode partitionAssignorMode, @NonNull Class<T> clazz) { partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); register(topic, groupId, handler, null, partitionAssignorMode, clazz, SerializeEnum.JSON); }@Override public void registerBroadcast(@Nonnull String topic, @Nonnull GenericEventHandler handler, @Nonnull ExecutorService executor, @Nonnull SerializeEnum serializeEnum) { switch (serializeEnum) { case KRYO: String groupId = idGenerator.createGroupId(topic); registerUnicast(topic, groupId, handler, executor, serializeEnum); break; case JSON: default: registerBroadcastGenerically(topic, handler, executor, EventV2.class); break; } } /** * 注册处理广播事件的handler groupId使用UUID随机生成,确保唯一性。 * * @param topic 主题 * @param handler 事件处理类 * @param executorService 上层传递的处理业务的线程池 * @param partitionAssignorMode 分区分配策略 */ @Override public void registerBroadcast(@Nonnull String topic, @Nonnull GenericEventHandler handler, @Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode, @Nonnull SerializeEnum serializeEnum) { switch (serializeEnum) { case KRYO: String groupId = idGenerator.createGroupId(topic); registerUnicast(topic, groupId, handler, executorService, partitionAssignorMode, serializeEnum); break; case JSON: default: registerBroadcastGenerically(topic, handler, executorService, partitionAssignorMode, EventV2.class); break; } } /** * 注册处理单播事件的handler 一个topic对应一个consumerId * * @param topic 主题 * @param groupId 消费者组Id,在同一个组里的消费者实现单播消费 * @param handler 事件处理类 * @param executor 上层传递的用于业务处理的线程池 */ @Override public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler handler, @Nonnull ExecutorService executor, @Nonnull SerializeEnum serializeEnum) { switch (serializeEnum) { case KRYO: registerUnicast(topic, groupId, handler, executor, null, serializeEnum); break; case JSON: default: registerUnicastGenerically(topic, groupId, handler, executor, null, EventV2.class); break; } } /** * 注册处理单播Topic消息的handler, * * @param topic 主题 * @param groupId 消费者组Id * @param handler 事件处理类 * @param executorService 上层传递的处理业务的线程池 * @param partitionAssignorMode 分区分配策略 */ @Override public void registerUnicast(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler handler, @Nonnull ExecutorService executorService, PartitionAssignorMode partitionAssignorMode, @Nonnull SerializeEnum serializeEnum) { switch (serializeEnum) { case KRYO: partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); register(topic, groupId, handler, executorService, partitionAssignorMode, EventV2.class, SerializeEnum.KRYO); break; case JSON: default: registerUnicastGenerically(topic, groupId, handler, executorService, partitionAssignorMode, EventV2.class); break; } } /** * 注册处理广播Topic消息的无业务线程池的Handler * * @param topic 主题 * @param handler 事件处理类 * @param partitionAssignorMode 分区分配策略 */ @Override public void registerBroadcastWithoutThreadPool(@Nonnull String topic, @Nonnull GenericEventHandler handler, PartitionAssignorMode partitionAssignorMode, @Nonnull SerializeEnum serializeEnum) { switch (serializeEnum) { case KRYO: String groupId = idGenerator.createGroupId(topic); registerUnicastWithoutThreadPool(topic, groupId, handler, partitionAssignorMode, serializeEnum); break; case JSON: default: registerBroadcastWithoutThreadPoolGenerically(topic, handler, partitionAssignorMode, EventV2.class); break; } } /** * 注册处理单播Topic消息的无业务线程池的Handler * * @param topic 主题 * @param groupId 消费者组 * @param handler 事件处理类 * @param partitionAssignorMode 分区分配策略 */ @Override public void registerUnicastWithoutThreadPool(@Nonnull String topic, @Nonnull String groupId, @Nonnull GenericEventHandler handler, PartitionAssignorMode partitionAssignorMode, @Nonnull SerializeEnum serializeEnum) { switch (serializeEnum) { case KRYO: partitionAssignorMode = getPartitionAssignorMode(topic, groupId, partitionAssignorMode); register(topic, groupId, handler, null, partitionAssignorMode, EventV2.class, SerializeEnum.JSON); break; case JSON: default: registerUnicastWithoutThreadPoolGenerically(topic, groupId, handler, partitionAssignorMode, EventV2.class); break; } }
10-10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值