Qri*_*Qri 6 java interceptor cdi weld
我想在Java-SE应用程序中使用拦截器,并且将焊接用作CDI实现,并且在这里进行测试:
主班:
public static void main(String[] args) {
WeldContainer weldContainer = new Weld().initialize();
Service service = weldContainer.instance().select(Service.class).get();
service.methodCall();
service.methodCallNumberTwo();
}
Run Code Online (Sandbox Code Playgroud)
服务等级:
public class Service {
@TestAnnotation
public void methodCall(){
System.out.println("methodCall...!");
methodCallNumberTwo();
}
@TestAnnotation
public void methodCallNumberTwo(){
System.out.println("methodCallNumberTwo...!");
}
}
Run Code Online (Sandbox Code Playgroud)
拦截器类:
@Interceptor
@TestAnnotation
public class TestInterceptor {
@AroundInvoke
public Object interceptorMethod(InvocationContext invocationContext) throws Exception {
System.out.println("I'm the TestInterceptor of "+invocationContext.getMethod());
return invocationContext.proceed();
}
}
Run Code Online (Sandbox Code Playgroud)
Aaa和输出:
I'm the TestInterceptor of public void Service.methodCall()
methodCall...!
methodCallNumberTwo...!
I'm the TestInterceptor of public void Service.methodCallNumberTwo()
methodCallNumberTwo...!
Run Code Online (Sandbox Code Playgroud)
我的问题
第一:为什么我在调用methodCallNumberTwo()时没有在methodCall()中调用拦截器?
第二:有办法改变吗?
我仅研究拦截器的行为,并且想了解。先感谢您!
不会调用拦截器,因为您是在对象的同一实例上调用它。如果您熟悉 EJB,这与在同一对象上调用方法而不是通过 EJB 上下文调用方法相同。
如果通过它进行调试,您会注意到注入对象上的方法调用通过代理。从 methodOne 到 methodTwo 的方法调用没有被代理。
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |