静态代理模式
创建一个内部类,内部类中去实现代理者的方法
动态代理模式
JAVA动态代理【基于接口】
cglib动态代理【基于继承】
`
/**
* 代理设计模式--动态代理 cglib动态代理
* 解决代码混杂问题
* 解决代码重复问题
* 基于继承实现 对于非接口方法一样可以实现代理
* 不是sun的解决方案需要导包才可以使用
* 理论上性能没有java动态代理好
* */
@Test
public void test04(){
FBB fbb=new FBB();//被代理者
//1.创建增强器
Enhancer enhancer=new Enhancer();
//2.指定实现的接口(非强制)
enhancer.setInterfaces(FBB.class.getInterfaces());
//3.指定父类(强制)---被代理者
enhancer.setSuperclass(FBB.class);
//4.指定回调函数
enhancer.setCallback(new MethodInterceptor() {
/**
* @param proxy 代理者
* @param method 正在被调用的方法
* @param args 正在被调用的方法的参数
* */
@Override
public Object intercept(Object proxy, Method method,
Object[] args, MethodProxy mp) throws Throwable {
System.out.println("XP:你谁呀???");
Object retObj = method.invoke(fbb, args);
System.out.println("XP:记录一下。。");
return retObj;
}
});
//5.创建代理者
FBB xp = (FBB) enhancer.create();
//有事找xp
xp.eat();
xp.sign();
xp.shufa();//书法方法接口中没有,java动态代理无法实现
}
}
Spring下的代理