0

我正在尝试通过以下方式将类自动装配到 WebSocketServlet 中:

@Configurable(autowire=Autowire.BY_TYPE)
public class MyServlet extends WebSocketServlet {
    @Autowired
    public MyClass field;

    // etc...
}

这是我的配置:

<context:annotation-config />
<context:component-scan base-package="org.*" />

<bean id="config" class="org.*.MyClass">
   <!-- a bunch of properties -->
</bean>

请注意,只要我在 Spring 中, autowire 就可以正常工作@Controller。我不得不走出那一步,因为我不知道如何将 WebSocketsServlet 映射到@Controller您使用常规 servlet 的方法。

知道我可能会错过什么吗?

4

3 回答 3

2

为了使用@Configurable,您需要在游览上下文中有这些行:

<context:load-time-weaver aspectj-weaving="true"/>
<context:spring-configured/>    
<context:annotation-config />
<context:component-scan base-package="org.*" />

此外,我认为您必须在清单的 Import-Library 部分中引用 spring-aspect。

我没有成功使它工作,在 Eclipse 的 Virgo 论坛上有一个帖子。如果你成功了,请告诉我如何;)

于 2012-10-11T12:08:34.210 回答
1

摆脱 @Configurable 并在 servlet init 方法中执行以下操作可以解决问题:

@Override
public void init() throws ServletException {
   super.init();
   SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
于 2012-10-05T15:15:58.090 回答
-4

根据弹簧文档

可以通过使用或注释将 Spring Environment 注入到@Configuration类中来查找外部化值:@Autowired@Inject

 @Configuration
 public class AppConfig {
     @Inject Environment env;

     @Bean
     public MyBean myBean() {
         MyBean myBean = new MyBean();
         myBean.setName(env.getProperty("bean.name"));
         return myBean;
     }
 }
于 2012-10-05T10:17:25.393 回答