3
我正在用java做一些測試例子,我想出了一個使用@AroundInvoke的例子。問題是我不確切知道調用的方法在哪裏。@AroundInvoke攔截器在哪裏被調用?
該測試在調用post()方法的地方進行調用,但我真的不知道這是如何工作的(Using Interceptors explanation)。
@Test
public void crudtest() {
JsonObjectBuilder todoBuilder = Json.createObjectBuilder();
JsonObject todoToCreate = todoBuilder.
add("caption", "implement").
add("priority", 10).
build();
//The next post execute, invoke the method
Response postResponse = this.provider.target().request().
post(Entity.json(todoToCreate));
}
調用的順序是BoundaryLogger然後MonitorSink
BoundaryLogger.java
...
public class BoundaryLogger {
@Inject
Event<CallEvent> monitoring;
@AroundInvoke
public Object logCall(InvocationContext ic) throws Exception {
long start = System.currentTimeMillis();
try {
return ic.proceed();
} finally {
long duration = System.currentTimeMillis() - start;
monitoring.fire(new CallEvent(ic.getMethod().getName(), duration));
}
}
}
MonitorSink
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class MonitorSink {
@Inject
LogSink LOG;
public void onCallEvent(@Observes CallEvent event){
LOG.log(event.toString());
}
}