package com.jy.common.netty.strategy; import com.jy.common.netty.protobuf.Message; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Component public class StrategyFactory { @Autowired private List<ChannelReadStrategy> channelReadStrategies; public void channelRead(ChannelHandlerContext ctx, Object t){ Message message= (Message) t; for(ChannelReadStrategy strategy : channelReadStrategies){ if(strategy.getCommandType()==message.getCmd()){ strategy.channelRead(ctx,t); } } } } 优化洗这段代码
时间: 2024-02-28 14:53:16 浏览: 121
在使用netty进行网络通信协议传输使用protobuf时protobuf编译.proto文件生成JAVA类.zip
1. 使用 @Slf4j 注解替换掉日志的手动声明,简化代码。
2. 将 @PostConstruct 注解添加到 channelReadStrategies 的初始化方法上,确保在依赖注入完成后进行初始化。
3. 将 for 循环替换为 Java 8 的 Stream API,使用 filter 和 findFirst 方法来查找符合条件的 ChannelReadStrategy 对象,并调用其 channelRead 方法。
4. 将 StrategyFactory 类的 Bean 声明移动到配置类中,使用 @Configuration 和 @Bean 注解来声明该 Bean。
具体代码如下:
```java
package com.jy.common.netty.strategy;
import com.jy.common.netty.protobuf.Message;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.List;
@Configuration
@Slf4j
public class StrategyFactory {
@Autowired
private List<ChannelReadStrategy> channelReadStrategies;
@PostConstruct
public void init() {
log.info("Initialized {} channel read strategies", channelReadStrategies.size());
}
public void channelRead(ChannelHandlerContext ctx, Object t) {
Message message = (Message) t;
channelReadStrategies.stream()
.filter(strategy -> strategy.getCommandType() == message.getCmd())
.findFirst()
.ifPresent(strategy -> strategy.channelRead(ctx, t));
}
}
```
阅读全文