我对这个问题有解决方案。但是我并不肯定这是正确的事情。我有一个带有属性的bean,该属性将根据请求进行更改。 当我自动装配该bean时,我手动调用了setter属性 我认为有一种更好的方法甚至可以更改设计
这是我要自动装配的豆子
@Component
public class Handler1 {
private final Channel inboundChannel;
//1 public Handler1(Channel inboundChannel){
//2 this.inboundChannel=in;
//3 }
public void setChannel(Channel in){
this.inboundChannel=in;
}
}
在我的受助人那边
@Component
public class Client {
@Autowired
Handler1 myHandler;
@Override
public void channelActive(ChannelHandlerContext ctx){
final Channel inboundChannel = ctx.channel(); //4
handler.setChannel(inboundChannel);
// Start the connection attempt.
Bootstrap b = new Bootstrap();
b.group(inboundChannel.eventLoop())
.channel(ctx.channel().getClass())
.handler(myHandler)
.option(ChannelOption.AUTO_READ, false);
.....
}
首先,由于通道未自动接线,因此无法使用参数(第1-3行)进行构造。其次,我正在调用setter来更改不是我自己的bean的状态,这是正确的做法。还有其他选择吗?