import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Aop {
public static void main(String[] args) {
Music music = new Music();//创建一个真正对象
Art art = (Art) ProxyFactory.getProxy(music);//创建一个动态代理
art.perform();
}
}
/**
* 要让对象能被动态代理,要为对象定义一个接口
* @author Administrator
*
*/
interface Art{
public void perform();
}
class Music implements Art{
@Override
public void perform() {
System.out.println("音乐家表演音乐");
}
}
class Broker{
public void money(){
System.out.println("出厂费100万");
}
public void thank(){
System.out.println("感谢各位观众");
}
}
class ProxyFactory{
public static Object getProxy(Object obj){
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Broker broker = new Broker();
broker.money();//在执行主要逻辑业务前的工作
Object result = method.invoke(obj, args);
broker.thank();//在执行主要逻辑业务后的工作
return result;
}
});
}
}
动态代理与AOP
最新推荐文章于 2023-09-18 15:01:30 发布