我的apache应用程序位于Spring上下文中。
<bean id="ghChatServer" class="io.gamehammer.service.ghchat.server.GhChatServer"
init-method="init" destroy-method="destroy">
<property name="port" value="5222" />
</bean>
处理程序也在容器内。
<bean id="eventHandler" class="io.gamehammer.service.ghchat.handler.EventHandler"></bean>
在sessionCreate中,它将创建一个新的worker并将其放在HashMap中。断开连接时将其取下。
@Override
public void sessionCreated(IoSession session) throws Exception {
sessionWorker = new SessionWorker();
sessionHandler.init(session);
cpntext.put(session, sessionHandler);
log.info("Current connected session : " + handlers.size());
}
我可以将bean注入我的处理程序。但我也想为我的工人注入服务。当我的处理程序中的sessionCreated被调用时,如何动态创建bean?
默认情况下是否可以实现我自己的范围,如HttpSession范围?
答案 0 :(得分:0)
我之前想念这个。需要一些代码才能做到这一点。
String beanName = "sessionHandler-" + session.toString();
AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory();
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) factory;
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(SessionHandler.class);
registry.registerBeanDefinition(beanName, beanDefinition);
factory.autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);
SessionHandler sessionHandler = (SessionHandler) applicationContext.getBean(beanName);
sessionHandler.init(session);
在此之后,我可以在Worker内部自动提供服务。