public class ProxyFactory {
private Object targetObject;
private AfterActive afterActive;
private BeforeActive beforeActive;
public Object creatProxy(){
ClassLoader classLoader = this.getClass().getClassLoader();
Class<?>[] interfaces = targetObject.getClass().getInterfaces();
InvocationHandler invocationHandler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (beforeActive != null) {
beforeActive.befoe();
}
Object res = method.invoke(targetObject, args);
if (afterActive != null) {
afterActive.after();
}
return res;
}
};
return Proxy.newProxyInstance(classLoader,interfaces,invocationHandler);
}
public void setTargetObject(Object targetObject){
this.targetObject = targetObject;
}
public void setAfterActive(AfterActive afterActive){
this.afterActive = afterActive;
}
public void setBeforeActive(BeforeActive beforeActive) {
this.beforeActive = beforeActive;
}
}
public class AOPDemo {
public static void main(String[] args) {
ProxyFactory proxyFactory = new ProxyFactory();
proxyFactory.setAfterActive(new AfterActive() {
@Override
public void after() {
System.out.println("服务结束");
}
});
proxyFactory.setBeforeActive(new BeforeActive() {
@Override
public void befoe() {
System.out.println("服务开始");
}
});
proxyFactory.setTargetObject(new MainServer());
Server server = (Server) proxyFactory.creatProxy();
server.say();
server.dance();
}
}