AOP的两种模式代码测试

xiaoxiao2021-02-28  53

public interface Service { void say(); void run(); } public class ServiceImpl implements Service{ @Override public void say() { System.out.println("我会说话了"); } @Override public void run() { System.out.println("我会跑步了"); } } public class MyProxy implements InvocationHandler { private Object obj; public Object bind(Object obj){ this.obj = obj; return Proxy.newProxyInstance(this.obj.getClass().getClassLoader(), this.obj.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object obj = null; System.out.println("执行前业务......"); obj = method.invoke(this.obj, args); System.out.println("执行后业务......"); return obj; } } public class CgProxy implements MethodInterceptor { // 维护目标对象 private Object target; public CgProxy(Object target){ this.target = target; } public Object getProxyInstance(){ Enhancer en = new Enhancer(); en.setSuperclass(target.getClass()); en.setCallback(this); return en.create(); } @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("开始....."); Object returnValue = method.invoke(target, args); System.out.println("结束....."); return returnValue; } } public class Test { public static void main(String[] args){ //jdk Service service = (Service)new MyProxy().bind(new ServiceImpl()); service.say(); //cglib Service target = new ServiceImpl(); Service proxy = (Service) new CgProxy(target).getProxyInstance(); proxy.say(); } }
转载请注明原文地址: https://www.6miu.com/read-2626191.html

最新回复(0)