gpt4 book ai didi

java - Spring配置类如何获取其方法所期望的对象实例?

转载 作者:行者123 更新时间:2023-12-02 11:16:11 24 4
gpt4 key购买 nike

Spring 中有几个功能对我来说有点像黑匣子。在本例中,我正在使用 websockets,并且 @Configuration 类使用需要实例化对象作为参数的重写方法来实现或扩展某些内容。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}

方法configureMessageBroker需要MessageBrokerRegistry类的实例,但整个项目中没有任何bean配置。

我的问题是,Spring 从哪里获取这些类的实例?

最佳答案

这不仅适用于 @EnableWebSocketMessageBroker,也适用于任何其他 spring 配置。您需要了解的是,当您运行项目时,spring 创建所需的对象(在本例中为 MessageBrokerRegistry),注入(inject)它,然后将其传递给 configureMessageBroker 并调用该方法。这就是向类添加 @Configuration 注释的原因。这个注解告诉spring在spring初始化的时候初始化相关的环境。

另一个例子:

@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");

return viewResolver;
}

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}

}

现在我们需要 DefaultServletHandlerConfigurer,它完全由 spring 创建和管理。configureDefaultServletHandling() 方法被重写,我们启用默认的 servlet 处理程序。这将使其他 http 请求(例如 .css、.js)穿过通常的 DispatcherServlet,并让容器处理它们。现在我们可以从 WebApp 文件夹中提供静态文件 css 和 javascript。

简单来说,@Configuration告诉spring去设置环境,所以所有被@Configuration注解的类中的方法都是用于初始化的,并且只供spring来管理。

正如 Esther Álvarez Feijoo 所指出的,您可以通过调试更好地理解它。

关于java - Spring配置类如何获取其方法所期望的对象实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50625645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com