统一接口:
package com.li.springboot.test;
public interface Star {
void sing();
void dance();
}
目标类:
package com.li.springboot.test;
public class BigStar implements Star{
public void sing(){
System.out.println("功能一 ");
}
public void dance(){
System.out.println("功能二");
}
}
一、静态代理:
代理类:
package com.li.springboot.test;
public class StarProxy implements Star{
private Star star;
public StarProxy(Star star) {
this.star = star;
}
@Override
public void sing() {
System.out.println("增强1");
star.sing();
System.out.println("增强2");
}
@Override
public void dance() {
System.out.println("增强1");
star.dance();
System.out.println("增强2");
}
}
二、动态代理:
jdk动态代理
package com.li.springboot.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxy {
public static Star getStarProxy(BigStar bigStar) {
Star starProxy = (Star) Proxy.newProxyInstance(DynamicProxy.class.getClassLoader(),
new Class[]{Star.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("增强代码1");
method.invoke(bigStar, args);
System.out.println("增强代码2");
return null;
}
});
return starProxy;
}
}