AOP的例子(计算器的实现)
cal接口类
package cn;
public interface cal {
public int add(int num1,int num2);
public int sub(int num1,int num2);
public int mul(int num1,int num2);
public int div(int num1,int nucacm2);
}
calimpl接口实现类
package cn;
public class calimpl implements cal{
@Override
public int add(int num1, int num2) {
int result =num1+num2;
return result;
}
@Override
public int sub(int num1, int num2) {
int result =num1-num2;
return result;
}
@Override
public int mul(int num1, int num2) {
int result =num1*num2;
return result;
}
@Override
public int div(int num1, int num2) {
int result =num1/num2;
return result;
}
}
代理对象的类
package cn;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
public class MyHander implements InvocationHandler {
private Object object=null;
public Object bind(Object object)
{
this.object=object;
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName()+""+Arrays.toString(args));
Object result = method.invoke(this.object,args);
System.out.println(result);
return result;
}
}
测试类
package cn;
public class Text1 {
public static void main(String[] args) {
cal zh = new calimpl();
// zh.add(1,1);
// zh.sub(3,3);
MyHander zz=new MyHander();
cal re=(cal)zz.bind(zh);
re.sub(4,5);
}
}