簡體   English   中英

Java @Inject無法正常工作-方法返回null

[英]Java @Inject not working - method returns null

不確定為什么沒有注入接口。 測試始終返回null。 我在WEB-INF也有beans.xml 為什么返回null?

我還嘗試使用@ApplicationScoped和一個生成新TImpl的類對服務類進行注釋。

public interface T {
 int test_method(int n );
 public void addToSession(Session session);
} 

@Handler // Qualifier
public TImpl implements T{

 private static Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
 public TImpl();

 @Override
 int test_method(int n){ return n * 2; }

 @Override
 public void addToSession(Session session){ 
  sessions.add(session);
}
}

public class TService implements Serializable {

 private @Inject @Handler T;

 public TService() {}
 ... 

 int test_method_service(int n) { return T.test_method(n); }
 public void addToSession(Session session) { T.addToSession(session); }

}

public class L extends Endpoint {

 TService service;

 public L(TService s){ this.service = t; }
 public L(){}


 @Override
 public void OnOpen(Session session, ... ) 

 servive.addToSession(session); // null pointer
 ...
}

堆棧跟蹤

java.lang.NullPointerException
at com.vio.sockets.configuration.MessageEndPoint.onOpen(MessageEndPoint.java:40)
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:133)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:914)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

您說您的測試返回null ,但是stacktrace講述了一個不同的故事: expected:<6> but was:<0>不是NullPointerException ,這意味着對service.test_method_service(3)的調用返回0 –為零。

這似乎就像Mockito模擬的預期行為:將T的模擬注入到service實例中,在T的模擬中調用test_method() ,並且Mockito的返回int方法的默認值為0。

當您想要其他行為時,必須設置模擬的行為:

Mockito.when(t.test_method(3)).thenReturn(6);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM