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