0

我可以在主类中成功读取HandlerSettings的自动装配实例,所以我知道我的application.properties条目是正确的。自动装配是否从PerConnectionWebSocketHandler实例化的类中工作?

@Component 
@ConfigurationProperties(prefix="handler") 
public class HandlerSettings { 
    private int timeout; 

    public int getTimeout(){ 
     return timeout; 
    } 

    public void setTimeout(int timeout){ 
     this.timeout = timeout; 
    } 
} 

我有试图自动装配在类MyHandler的,这是一个PerConnectionWebSocketHandler中实例化的字段困难。

@SpringBootApplication 
@RestController 
@EnableWebSocket 
@EnableConfigurationProperties(HandlerSettings.class) 
public class MyController implements WebSocketConfigurer{ 
    @Bean 
    public WebSocketHandler myHandler() { 
     return new PerConnectionWebSocketHandler(MyHandler.class)); 
    } 

我想在MyHandler的抽象基类中自动装入字段。

@Component 
public abstract class Handler implements WebSocketHandler { 
    @Autowired 
    private HandlerSettings handlerSettings; 
    ... 
} 

从MyHandler的继承处理程序:

public class MyHandler extends Handler 

的例子在Spring documentation没有解决如何在继承的任一情况下,或类实例化与PerConnectionWebSocketHandler的方式做。

我已经尝试过在处理程序中自动装入字段失败。如果该类是由PerConnectionWebSocketHandler实例化的,那么可以自动装配吗?如果是这样,有什么特别的我必须做自动装配基类,但不是扩展它的类?

回答

1

根据源代码,除非您设置PerConnectionWebSocketHandler.setBeanFactory将实例化一个没有注入Bean的处理程序。

@SpringBootApplication 
@RestController 
@EnableWebSocket 
@EnableConfigurationProperties(HandlerSettings.class) 
public class MyController implements WebSocketConfigurer { 

    @Autowired 
    private BeanFactory beanFactory; 

    @Bean 
    public WebSocketHandler myHandler() { 
     PerConnectionWebSocketHandler perConnectionWebSocketHandler = new PerConnectionWebSocketHandler(MyHandler.class); 
     perConnectionWebSocketHandler.setBeanFactory(beanFactory); 
     return perConnectionWebSocketHandler; 
    } 
} 
+0

此更改不足以获取MyHandler中application.properties中配置的HandlerSettings。 – mattm

+0

为我工作,我的处理程序类中的自动装配bean按预期工作 – Christian