@Autowired @Configurable servlet的问题

时间:2012-10-05 10:13:27

标签: java spring autowired configurable eclipse-virgo

我试图通过以下方式将类自动装入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>

请注意,只要我在春季@Controller ,autowire就可以正常工作了。我不得不走出去,因为我不知道如何将WebSocketsServlet映射到@Controller的方法,就像使用常规servlet一样。

知道我可能缺少什么吗?

3 个答案:

答案 0 :(得分:2)

为了使用@Configurable,你需要在巡回上下文中包含这些行:

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

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

我没有成功使它成功,在Eclipse的Virgo论坛上有一篇文章。 如果你成功了,请告诉我如何;)

答案 1 :(得分:1)

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

@Override
public void init() throws ServletException {
   super.init();
   SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}

答案 2 :(得分:-4)

根据spring documentation

可以使用@Configuration@Autowired注释将Spring环境注入@Inject类来查找外部化值:

 @Configuration
 public class AppConfig {
     @Inject Environment env;

     @Bean
     public MyBean myBean() {
         MyBean myBean = new MyBean();
         myBean.setName(env.getProperty("bean.name"));
         return myBean;
     }
 }