TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
通过这个大家可以看看所谓最简单的横切是怎么出来的。
package zt.aop.test;
/**
* 业务接口A
*/
interface Interface_A{
public void do_A1();
public void do_A2();
public void do_A3();
}
/**
* 业务接口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>
源码下载:http://file.javaxxz.com/2014/10/29/235830765.zip |
|