我创建了一个名为 InterceptionLogger.java
的 Controller
,其中仅包含 Interception
方法。另一个 Controller
即 Application
将包含所有 action
方法,并使用 @With 来使用
注释。Interception
这是Application.java
Controller :
@With(InterceptionLogger.class)
public class Application extends Controller {
public static void index() {
System.out.println("Inside index!!!");
render();
}
public static void welcome(String txtName){
render(txtName);
}
如果InterceptionLogger.java
Controller 是这样的:
public class InterceptionLogger extends Controller {
@Before
static void logBefore(){
System.out.println("Inside \"logBefore\" method of App Controller");
}
@After
static void logAfter(){
System.out.println("Inside \"logAfter\" method of App Controller");
}
}
当我运行应用程序时,输出是:
Inside "logBefore" method of App Controller
Inside index!!!
Inside "logAfter" method of App Controller
很好,正如预期的那样。
但是如果我将 InterceptionLogger.java
更改为:
public class InterceptionLogger extends Controller {
@Before(only="welcome")
static void logBefore(){
System.out.println("Inside \"logBefore\" method of App Controller");
}
@After(only="index")
static void logAfter(){
System.out.println("Inside \"logAfter\" method of App Controller");
}
}
然后我得到index
的输出:
Inside index!!!
在这种情况下,为什么 Inside "logAfter"method of App Controller
语句没有打印在控制台中?
如何让它发挥作用?
最佳答案
玩吧!正在寻找当前 Controller 中拦截的方法。如果该方法位于另一个 Controller 中,您需要提供完整路径:
@Before(only="Application.welcome")
static void logBefore(){
System.out.println("Inside \"logBefore\" method of App Controller");
}
@After(only="Application.index")
static void logAfter(){
System.out.println("Inside \"logAfter\" method of App Controller");
}
关于java - 使用单独的 Controller 进行拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14669964/