實現aop的方式 用於實現action以前,以後執行 通常用於事物操做. 通常用於對某些未受權的頁面訪問的時候,進行攔截操做,攔截非法訪問.html
<!-- 攔截器 -->
<interceptor-ref name="params"/> <!-- 傳遞屬性攔截器 -->
<interceptor-ref name="timer"/> <!-- 測算執行時間 -->
複製代碼
必須有傳遞屬性這個攔截器java
運行輸出日誌以下redis
2019-03-24 03:50:19.231 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@33e67d25, member: public java.lang.String com.ming.HelloWorldAction.getName(), property: name]
2019-03-24 03:50:19.232 [INFO ] com.opensymphony.xwork2.interceptor.TimerInterceptor.doLog(TimerInterceptor.java:205) - Executed action [//hello!execute] took 12 ms.
複製代碼
能夠看到這個action一共運行耗時12ms數據庫
須要繼承該抽象類,並實現其方法 即 com.opensymphony.xwork2.interceptor.AbstractInterceptor 抽象類apache
代碼以下編程
package com.ming;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyInterceptor extends AbstractInterceptor {
/**
* Override to handle interception
*
* @param invocation
*/
@Override
public String intercept(ActionInvocation invocation) throws Exception {
return null;
}
}
複製代碼
package com.ming;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class MyInterceptor extends AbstractInterceptor {
/**
* Override to handle interception
*
* @param invocation
*/
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Logger logger = LogManager.getLogger();
// 執行結果前
String output = "hi before";
logger.info(output);
// 開始執行Action
String result = invocation.invoke();
// 執行結果後
output = "hi after";
logger.info(output);
// 繼續傳遞到下一個攔截器
return result;
}
}
複製代碼
<!-- 攔截器 -->
<interceptor-ref name="params"/> <!-- 傳遞屬性攔截器 -->
<interceptor-ref name="timer"/> <!-- 測算執行時間 -->
<interceptor-ref name="MyInterceptor"/>
<!-- 成功返回頁面 -->
<result name="success">/HelloWorld.jsp</result>
<result name="error">/error.html</result>
複製代碼
控制檯輸出結果以下tomcat
2019-03-24 04:37:24.086 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@5121691d, member: public void com.ming.HelloWorldAction.setName(java.lang.String), property: name]
2019-03-24 04:37:24.087 [INFO ] com.ming.MyInterceptor.intercept(MyInterceptor.java:19) - hi before
2019-03-24 04:37:24.089 [DEBUG] com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) - Executing action method = execute
2019-03-24 04:37:24.106 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@5121691d, member: public java.lang.String com.ming.HelloWorldAction.execute() throws java.lang.Exception, property: null]
2019-03-24 04:37:24.143 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: org.apache.struts2.result.ServletDispatcherResult@2e4369c6, member: public void org.apache.struts2.result.StrutsResultSupport.setLocation(java.lang.String), property: location]
2019-03-24 04:37:24.143 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: org.apache.struts2.result.ServletDispatcherResult@2e4369c6, member: public void org.apache.struts2.result.StrutsResultSupport.setLocation(java.lang.String), property: location]
2019-03-24 04:37:24.150 [DEBUG] org.apache.struts2.result.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:127) - Forwarding to location: /error.html
2019-03-24 04:37:24.158 [DEBUG] com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.nullPropertyValue(InstantiatingNullHandler.java:98) - Entering nullPropertyValue [target=[com.ming.HelloWorldAction@5121691d, com.opensymphony.xwork2.DefaultTextProvider@2e34626e], property=struts]
2019-03-24 04:37:24.175 [INFO ] com.ming.MyInterceptor.intercept(MyInterceptor.java:26) - hi after
2019-03-24 04:37:24.176 [INFO ] com.opensymphony.xwork2.interceptor.TimerInterceptor.doLog(TimerInterceptor.java:205) - Executed action [//hello!execute] took 89 ms.
複製代碼
能夠看到,因爲配置了3個攔截器,攔截器被順序執行. 在執行先後分別執行了兩個操做bash
這就是面向切面編程 此處能夠添加事物 鎖 其中鎖能夠用redis實現,達到同時多個tomcat實例讀取數據庫的時候,進行加鎖操做,使用redis達到鎖的目的jsp