자바 측에서 소켓을 생성하는 클래스가 있습니다. 문제는 실제로 내 설정을 통해 검색되고,이 클래스에있는 java.lang.IllegalArgumentException: No bean found for class com.production.workflow.process.approval.ApprovalSocketHandler
@Component와 @Bean에도 불구하고 클래스에 대한 빈을 찾지 못했습니다.
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 실행 중 빈인지 확인하려면 어떻게해야합니까?
'ServletContextListener's는 서블릿 컨테이너에 의해로드되고 등록됩니다. –
@SotiriosDelimanolis -이 시나리오에서 그 의미는 무엇입니까? – Webnet
서블릿 컨테이너는 Spring이 처리하기 전에 처리하므로, 'contextInitialized'에서 빈을 사용할 수 없다. 나는 당신을위한 솔루션을 가지고 있지 않습니다. –