气氛+春天+自动问题

时间:2013-11-05 11:56:21

标签: java spring servlets spring-mvc atmosphere

我正在开发一个网络应用并试图整合聊天(暂时)。我正在使用Spring和Atmosphere来做到这一点。 我设法让聊天工作,但现在我似乎遇到了问题。 我在一个单独的servlet中使用@ManagedService(类似于atmosphere-chat-multiroom示例),现在我需要访问spring应用程序中的bean。对于我正在使用的其余servlet,这可以完美地工作,但是当我在Atmosphere ManagedService中执行此操作时,我处于死胡同,该服务始终返回为null。

有没有人知道我能做些什么?

@ManagedService(path = "{room: [a-zA-Z][a-zA-Z_0-9]*}")
@Singleton
public class ChatRoom {
private final Logger logger = LoggerFactory.getLogger(ChatRoom.class);

private final ConcurrentHashMap<String, String> users = new ConcurrentHashMap<String, String>();
private String chatroomName;
private String mappedPath;
private BroadcasterFactory factory;
@Autowired
IFriendsServices friendServices;

@Message(encoders = { JacksonEncoder.class }, decoders = { UserDecoder.class })
public void onPrivateMessage(ChatUserMessageDTO user) throws IOException {
    String userUUID = users.get(user.getUser());
    friendServices.createChatMessage(user.getUser(), user.getSource(), user.getMessage());
    if (userUUID != null) {
        AtmosphereResource r = AtmosphereResourceFactory.getDefault().find(userUUID);
        if (r != null) {
            ChatProtocolMessageDTO m = new ChatProtocolMessageDTO(user.getSource(), user.getMessage(),
                    users.keySet(), factory.lookupAll());
            factory.lookup(mappedPath).broadcast(m, r);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你好,我在春天挖的时候发现各种有趣的东西。对于非Spring托管类,请按照以下两个步骤使用autowire访问属性

public class ChatRoom extends SpringBeanAutowiringSupport{ 

and then use @Autowire