最近發現很多朋友連攔截器都不知道
java攔截器的基本原理其實非常簡單
下面來看一個簡單的例子
首先
CODE清單一
Java代碼
<SPAN >//攔截器
public class InterceptorClass {
public void before() {
System
}
public void after() {
System
}
}</SPAN>
我們模擬一個業務組件接口BusinessInterface
CODE清單二
Java代碼
<SPAN >/**
* Created by IntelliJ IDEA
* User: Ming
* Date:
* Time:
*/
//業務組件接口
public interface BusinessInterface {
public void doSomething();
}</SPAN>
CODE清單三
Java代碼
<SPAN >/**
* Created by IntelliJ IDEA
* User: Ming
* Date:
* Time:
*/
//業務組件實現類
public class BusinessClass implements BusinessInterface {
public void doSomething() {
System
}
}</SPAN>
然後
法的時候
CODE清單四
Java代碼
<SPAN >/**
* Created by IntelliJ IDEA
* User: Ming
* Date:
* Time:
*/
/**
* 動態代理類
* 包含了業務對象綁定動態代理類的處理
*/
public class DynamicProxyHandler implements InvocationHandler {
private Object business;//被代理對象
private InterceptorClass inceptor = new InterceptorClass();//攔截器
public DynamicProxyHandler(Object business) {
this
}</SPAN>
// 代理要調用的方法
Java代碼
<SPAN >/**
* @param proxy 代理類對象
* @param method 被代理的接口方法
* @param args 被代理接口方法的參數
* @return
* @throws Throwable
*/
public Object invoke(Object proxy
Object result = null;
inceptor
result = method
inceptor
return result;
}</SPAN>
OK
CODE清單五
Java代碼
<SPAN > public static void main(String[] args) {
//生成待測試的業務組件對象
BusinessInterface business = new BusinessClass();
//生成動態代理類實例
DynamicProxyHandler handler = new DynamicProxyHandler(business);
BusinessInterface businessProxy = (BusinessInterface) Proxy
//被代理類的ClassLoader
business
//要被代理的接口
business
//代理處理器對象
handler);
//用動態代理類調用方法
businessProxy
}</SPAN>
來看看結果
近期struts
struts
首先我們要建一個攔截器類
CODE清單六
Java代碼
<SPAN >public class AuthorizationInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map session = invocation
String userName = (String) session
if ( userName != null && userName
System
return invocation
}
else
{
System
return Action
}
}
}
</SPAN>
這個類是必須要繼承struts
那麼經理在這個攔截器裡面寫了一個簡單的實現
接下來比較關鍵的是過濾器在struts
CODE清單七
Java代碼
<SPAN ><package name=
<interceptors>
<!
<interceptor name=
class=
<!
<interceptor
<interceptor
<interceptor
</interceptor
</interceptors>
<!
<default
<!
<global
<result name=
</global
<action name=
<result name=
</action>
</package></SPAN>
在interceptors節點裡
截器defaultStack
struts
ok
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26790.html