我尝试使用带有 @Autowired 注释的 Spring 框架来获取 Service 类。
这里我的类(这个类由WebSocketServlet调用)需要使用服务(调用它时我得到 NullPointerException):
public class SignupWebSocketConnection extends MessageInbound {
private static final Logger log = LoggerFactory.getLogger(SignupWebSocketConnection.class);
@Autowired
private UserService userService;
@Override
protected void onOpen(WsOutbound outbound) {
log.info("Connection done");
}
@Override
protected void onClose(int status) {
log.info("Connection close");
}
@Override
protected void onBinaryMessage(ByteBuffer byteBuffer) throws IOException {
log.warn("Binary message are not supported");
throw new UnsupportedOperationException("Binary message are not supported");
}
@Override
protected void onTextMessage(CharBuffer charBuffer) throws IOException {
User userTest = new User("log", "pass", "ema");
userService.create(userTest);
}
}
这是我的 web.xml :
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这是我的 ApplicationContext.xml :
<bean id="userService" class="service.UserService">
如果我尝试通过显式调用 ApplicationContext-test.xml 来使用测试包中的服务(我使用 maven),它工作正常...... ApplicationContext.xml 和 ApplicationContext-test.xml 是相同的(只是数据库的参数变化)
非常感谢你们所有人:D
编辑 :
我在 ressources 文件夹中替换了我的 applicationContext.xml 并创建了一个类来测试:
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) ctx.getBean("userService");
User user = new User("log","pas","emai");
userService.create(user);
}
调用 userService.create() ... 时,我也会得到 NullPointerException。