浏览 5730 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-22
在Xwork中,AOP是通过Action、ActionInvocation和Interceptor这三个接口完成的。WebWork通过Action代理类ActionProxy来执行Action的execute方法,而该方法则调用ActionInvocation的invokeAction方法具体执行Action中的方法。在DefaultActionInvocation的invoke方法中可以看到拦截器的执行逻辑,代码如下: public String invoke() throws Exception { ...... if (interceptors.hasNext()) { InterceptorMapping interceptor = (InterceptorMapping) interceptors.next(); resultCode = interceptor.getInterceptor().intercept(this); } else { resultCode = invokeActionOnly(); } ...... } 看看上周的那个DefaultWorkflowInterceptor是如何工作的: protected String doIntercept(ActionInvocation invocation) throws Exception { // 取得要拦截的Action对象 Object action = invocation.getAction(); if (action instanceof Validateable) { /* * 如果action是Validateable接口的一个实例,则执行接口的validate方法,这个方法可能是检查用户 * 输入的合法性,如果有错误,可能往errors里增加错误信息。 Validateable validateable = (Validateable) action; if (_log.isDebugEnabled()) { _log.debug("Invoking validate() on action "+validateable); } try { PrefixMethodInvocationUtil.invokePrefixMethod( invocation, new String[] { VALIDATE_PREFIX, ALT_VALIDATE_PREFIX }); } catch(Exception e) { e.printStackTrace(); // If any exception occurred while doing reflection, we want // validate() to be executed _log.warn("an exception occured while executing the prefix method", e); } if (alwaysInvokeValidate) { validateable.validate(); } } /* * 如果action是ValidationAware的实例,则检查action中是否包含错误信息,如果有,则返回 * INPUT的Result代码,并且整个Action就终止。 */ if (action instanceof ValidationAware) { ValidationAware validationAwareAction = (ValidationAware) action; if (validationAwareAction.hasErrors()) { if (_log.isDebugEnabled()) { _log.debug("Errors on action "+validationAwareAction+", returning result name 'input'"); } return Action.INPUT; } } /* * 输入合法,执行action的功能。 */ return invocation.invoke(); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-02-24
嗯,对的!
|
|
返回顶楼 | |
发表时间:2007-03-05
学有所获
|
|
返回顶楼 | |