package spring.aop02_Proxy;
public class TimeBook implements TimeBookInterface
{
public void doAuditing(String name)
{
System.out.println(name);
}
}
package spring.aop02_Proxy;
public interface TimeBookInterface
{
public void doAuditing(String name);
}
package spring.aop02_Proxy;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class TimeBookProxy
{
private Logger logger = Logger.getLogger(this.getClass().getName());
private TimeBookInterface timeBookInterface;
public TimeBookProxy (TimeBookInterface timeBookInterface)
{
this.timeBookInterface = timeBookInterface;
}
public TimeBookInterface getTimeBookInterface()
{
return timeBookInterface;
}
public void setTimeBookInterface(TimeBookInterface timeBookInterface)
{
this.timeBookInterface = timeBookInterface;
}
public void doAuditing(String name)
{
logger.log(Level.INFO, "start auditing..");
timeBookInterface.doAuditing(name);
logger.log(Level.INFO, "end auditing..");
}
}
package spring.aop02_Proxy;
/**
* 静态代理
*
* @author ZengWenFeng
*/
public class TimeBookTest
{
public static void main(String[] args)
{
TimeBookProxy proxy = new TimeBookProxy(new TimeBook());
proxy.doAuditing("ZengWenFeng");
}
}
package spring.aop03_Proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class LogProxy implements InvocationHandler
{
private Logger logger = Logger.getLogger(this.getClass().getName());
private Object delegate;
// 2
public Object bind(Object delegate)
{
this.delegate = delegate;
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
Object result = null;
try
{
logger.log(Level.INFO, "start auditing..");
result = method.invoke(delegate, args);
logger.log(Level.INFO, "end auditing..");
}
catch (Exception e)
{
logger.log(Level.INFO, e.toString());
}
return result;
}
}
package spring.aop03_Proxy;
public class TimeBook implements TimeBookInterface
{
public void doAuditing(String name)
{
System.out.println(name);
}
}
package spring.aop03_Proxy;
public interface TimeBookInterface
{
public void doAuditing(String name);
}
package spring.aop03_Proxy;
/**
* 动态代理模式
*
*
* @author ZengWenFeng
*/
public class TimeBookTest
{
public static void main(String[] args)
{
LogProxy proxy = new LogProxy();
// 1
TimeBookInterface tbi = (TimeBookInterface)proxy.bind(new TimeBook());
tbi.doAuditing("ZengWenFeng");
}
}
package java_proxy.jdk.demo02;
public class TargetObject
{
public void say()
{
System.out.println("hello world.");
}
}
package java_proxy.jdk.demo02;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class ZwfMethodInterceptor implements MethodInterceptor
{
private Object target;//目标类
public ZwfMethodInterceptor(Object target)
{
this.target = target;
}
public Object createProxy()
{
Enhancer enhancer = new Enhancer();
enhancer.setCallback(this);
enhancer.setSuperclass(this.target.getClass());
return enhancer.create();
}
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable
{
System.out.println("aaaaa");//切面方法a();
//。。。
method.invoke(this.target, objects);//调用目标类的目标方法
//。。。
System.out.println("bbbbb");//切面方法f();
return null;
}
}
package java_proxy.jdk.demo02;
public class ZwfMethodInterceptorTest
{
public static void main(String[] args)
{
TargetObject target = new TargetObject();
ZwfMethodInterceptor myInterceptor = new ZwfMethodInterceptor(target);
TargetObject proxyObj = (TargetObject) myInterceptor.createProxy();
proxyObj.say();
}
}