首页 > 代码库 > Enhance基本例子
Enhance基本例子
太晚了,有些东西没有补充,回头再补上。
先上Demo
1.要执行的方法
package enhancerTest;
/**
* Created by LiuSuSu on 2017/3/26.
*/
public class UserService {
public void doxx(){
System.out.println("do...");
}
}
2. 代理类
package enhancerTest;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
/**
* Created by LiuSuSu on 2017/3/26.
*/
public class CglibCallBackUserService implements MethodInterceptor {
/**
* cglib调用的
*
* @param o 调用对象
* @param method 调用的方法
* @param args 参数
* @param methodProxy 代理的方法
* @return
* @throws Throwable
*/
@Override
public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
System.out.println("before " + method.getName());
//注意invoke代理的是自己,这是一个递归,死循环
//Object obj= methodProxy.invoke(o, args);
Object obj = methodProxy.invokeSuper(o, args);
System.out.println("after " + method.getName());
return obj;
}
}
3.测试方法
package enhancerTest;
import org.springframework.cglib.proxy.Enhancer;
/**
* Created by LiuSuSu on 2017/3/26.
*/
public class EnhanceTest {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(UserService.class);
enhancer.setCallback(new CglibCallBackUserService());
UserService service = (UserService) enhancer.create();
service.doxx();
System.out.println("over");
}
}
4.运行结果
before doxx
do...
after doxx
over
灵活性上远远大于传统的代理模式。
Enhance基本例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。