站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题一个AOP权限验证的小例子

一个AOP权限验证的小例子

摘要: 一个AOP权限验证的小例子

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="282" height="86" align="center" valign="top"> </td> <td width="402" valign="top">


通过这个大家可以看看所谓最简单的横切是怎么出来的。

package zt.aop.test;

/**
* 业务接口A
*/
interface Interface_A{
public void do_A1();
public void do_A2();
public void do_A3();
}

</td></tr> </table>

/**
* 业务接口B
*/
interface Interface_B{
public void do_B1();
public void do_B2();
public void do_B3();
}

/**
* 代理类应用
* @author lyw
* @version 1.0
*/
public class ProxyAnything implements InvocationHandler {

private Interface_A businessA;
private Interface_B businessB;

/**
* 创建代理
*/
public ProxyAnything(){
this.businessA = new Interface_A(){
public void do_A1() {
System.out.println("doing A1");
}
public void do_A2() {
System.out.println("doing A2");
}
public void do_A3() {
System.out.println("doing A3");
}
};
this.businessB = new Interface_B(){
public void do_B1() {
System.out.println("doing B1");
}
public void do_B2() {
System.out.println("doing B2");
}
public void do_B3() {
System.out.println("doing B3");
}
};
}

public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
// Interface_A 拦截回调处理
if(m.getDeclaringClass() == Interface_A.class){
if(m.getName().equals("do_A3")){
System.out.println("您没有调用do_A3的权限!");
}else{
return m.invoke(this.businessA, args);
}
}
// Interface_B 拦截回调处理
if(m.getDeclaringClass() == Interface_B.class){
System.out.println("您在【" + new Date() + "】调用了【" + m.getName() + "】函数");
return m.invoke(this.businessB, args);
}

return null;
}

public static void main(String[] args) throws Exception {

// 代理类的类加载器
ClassLoader classLoader = ProxyAnything.class.getClassLoader();
// 代理类要处理的所有接口(只能是接口interface,不能是类class)
Class[] interfaces = new Class[]{Interface_A.class, Interface_B.class};

// 代理回调处理对象
InvocationHandler handler = new ProxyAnything();

// 创建代理对象
Proxy proxy = (Proxy)Proxy.newProxyInstance(classLoader, interfaces, handler);

// 此时该代理对象拥有Interface_A和Interface_B接口
if(proxy instanceof Interface_A){
System.out.println("该proxy代理对象已经具有Interface_A接口");
}
if(proxy instanceof Interface_B){
System.out.println("该proxy代理对象已经具有Interface_B接口");
}
// 将代理对象转换成业务接口
Interface_A a = (Interface_A)proxy;
Interface_B b = (Interface_B)proxy;

// 进行业务处理
a.do_A1();
a.do_A2();
a.do_A3();
b.do_B1();
b.do_B2();
b.do_B3();
}
}

程序运行结果:


C:\java>java ProxyAnything
该proxy代理对象已经具有Interface_A接口
该proxy代理对象已经具有Interface_B接口
doing A1
doing A2
您没有调用do_A3的权限!
您在【Thu Apr 06 09:05:22 CST 2006】调用了【do_B1】函数
doing B1
您在【Thu Apr 06 09:05:22 CST 2006】调用了【do_B2】函数
doing B2
您在【Thu Apr 06 09:05:22 CST 2006】调用了【do_B3】函数
doing B3

C:\java>



</td> </tr> <tr>


↑返回目录
前一篇: 设计模式十八篇
后一篇: java动态代理的一点认识