首页 > 代码库 > aop用代理实现
aop用代理实现
package com.atguigu.java;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface Human1{
void info();
void fly();
}
//被代理类
class Superman1 implements Human1{
/* (non-Javadoc)
* @see com.atguigu.java.Human1#info()
*/
@Override
public void info() {
System.out.println("我是超人我怕谁");
}
/* (non-Javadoc)
* @see com.atguigu.java.Human1#fly()
*/
@Override
public void fly() {
System.out.println("i believe i can fly !");
}
}
class Humanutil1{
/**
* @author shanghaitao
* @since 2017年5月2日
*/
public void method1() {
System.out.println("------=方法一=-----");
}
/**
* @author shanghaitao
* @since 2017年5月2日
*/
public void method2() {
System.out.println("------=方法二=-----");
}
}
class MyinvacationHandlder1 implements InvocationHandler{
Object obj;
public void setObject(Object obj){
this.obj= obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Humanutil1 ht = new Humanutil1();
ht.method1();
Object oobj = method.invoke(obj, args);
ht.method2();
return oobj;
}
}
class Myproxy1{
/**
* @author shanghaitao
* @since 2017年5月2日
*/
public static Object getProxyInstance(Object obj) {
MyinvacationHandlder1 mh = new MyinvacationHandlder1();
mh.setObject(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), mh);
}
}
/**
*方法说明
* @author shanghaitao
* @since 2017年5月2日
*/
public class TestAOP1 {
public static void main(String[] args) {
Superman1 man = new Superman1();
Object obj = Myproxy1.getProxyInstance(man);
Human1 hu = (Human1)obj;
hu.info();
System.out.println();
hu.fly();
}
}
输出
------=方法一=-----
我是超人我怕谁
------=方法二=-----
------=方法一=-----
i believe i can fly !
------=方法二=-----
aop用代理实现