0

Java側でソケットを作成するこのクラスがあります。問題は、それが投げていることですjava.lang.IllegalArgumentException: No bean found for class com.production.workflow.process.approval.ApprovalSocketHandler

package com.production;

@WebListener
public class SocketInitializer implements ServletContextListener {

    public static App app;

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        AutowireCapableBeanFactory beanFactory = ApplicationContextProvider.getApplicationContext().getAutowireCapableBeanFactory();
        app =  new App(new Options().url("/socket/workstation/approval").packageOf(this), new AtmosphereModule(servletContextEvent.getServletContext()), new SpringModule(beanFactory));
        app.bean(ApprovalSocketHandler.class).init();
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}

このクラスが含まれるパッケージは、実際に私の設定を介してスキャンされています。このリスナーが初期化されている時点で、構成がまだスキャンされていないと思われます。

@Configuration
@ComponentScan(basePackages = {
        "com.production"
})
@PropertySource(value= {
        "classpath:/application.properties",
        "classpath:/environment-${MY_ENVIRONMENT}.properties"
})
@EnableJpaRepositories("com.production.repository")
@EnableTransactionManagement
public class Config {
    @Value("${db.url}")
    String PROPERTY_DATABASE_URL;
    @Value("${db.user}")
    String PROPERTY_DATABASE_USER;
    @Value("${db.password}")
    String PROPERTY_DATABASE_PASSWORD;

    @Value("${persistenceUnit.default}")
    String PROPERTY_DEFAULT_PERSISTENCE_UNIT;

    @Value("${hibernate.dialect}")
    String PROPERTY_HIBERNATE_DIALECT;
    @Value("${hibernate.format_sql}")
    String PROPERTY_HIBERNATE_FORMAT_SQL;
    @Value("${hibernate.show_sql}")
    String PROPERTY_HIBERNATE_SHOW_SQL;
    @Value("${entitymanager.packages.to.scan}")
    String PROPERTY_ENTITYMANAGER_PACKAGES_TO_SCAN;

    @Bean
    public App app() {
        return SocketInitializer.app;
    }

ServletContextListener の実行中にこのクラスが Bean であることを確認するにはどうすればよいですか?

4

1 に答える 1

1

インターフェースServletContextAwareはあなたが探しているものです。メソッドを提供します

setServletContext(ServletContext servletContext) 

Spring がアプリケーションコンテキストを注入するために使用するもの。あなたの場合、これはServletContextサーブレットコンテナによって作成されます。

aはSpringではなくサーブレットコンテナによって初期化されるServletContextListenerため、質問にあるようにこれを使用しないでください。ServletContextListenerしたがって、春はその魔法を行うことができません。

于 2013-04-29T16:10:56.913 に答える