使用@Configuration修饰的类能不能用@Autowired注解依赖注入
时间: 2023-08-25 19:46:30 浏览: 207
可以使用@Autowired注解依赖注入@Configuration修饰的类,因为@Configuration修饰的类在Spring容器中也是一个Bean,可以被@Autowired注解进行依赖注入。举个例子,如果有一个@Configuration修饰的类MyConfig,其中定义了一个Bean方法myBean(),则在另一个类中可以使用@Autowired注解将myBean()方法返回的Bean注入到该类中。
相关问题
@ServerEndpoint修饰的类无法使用@Autowired
`@ServerEndpoint` 是Spring WebSockets框架中的一个注解,用于标识一个类作为WebSocket服务器端点,它不是普通的Spring Bean,因此不适合常规的依赖注入(Autowired)。Spring的@Autowired主要是为了自动装配bean之间的依赖,而WebSocket服务通常需要手动创建并注册。
当你在一个`@ServerEndpoint` 类上使用`@Autowired` 注解时,Spring容器并不会尝试去查找或注入依赖。如果你在这个类里需要外部组件,建议通过构造函数、setter方法或者配置类直接传递实例。
例如:
```java
@Component
public class WebSocketHandler {
private final MyDependency myDependency;
// 使用构造函数传入依赖
public WebSocketHandler(MyDependency myDependency) {
this.myDependency = myDependency;
}
@ServerEndpoint("/endpoint")
public void handleMessages(StompSession session) {
// 在这里使用myDependency
myDependency.doSomething();
}
}
// 或者在配置类中手动添加到服务器端点
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websocket").setHandshakeHandler(...);
registry.addEndpoint("wsHandler").setHandler(new WsHandler(myDependency));
}
private class WsHandler {
private final MyDependency myDependency;
public WsHandler(MyDependency myDependency) {
this.myDependency = myDependency;
}
// ...
}
}
```
我在@Configuration注解修饰的Java类中写了个@Bean,然后再@Autowired注入到其他地方,是自动装配还是显式装配
这是自动装配。在@Configuration注解修饰的Java类中,@Bean注解会告诉Spring容器该方法将会返回一个Bean实例,Spring会自动将该实例纳入到容器中进行管理。而在其他地方使用@Autowired注解注入该Bean时,Spring会自动在容器中查找该类型的Bean,并将其注入到需要的地方。因此,这是一种基于类型的自动装配。
阅读全文