CGLib实现动态代理

梦里梦外; 2021-07-25 01:26 552阅读 0赞

一 代码位置

https://gitee.com/cakin24/javatest

二 代码

1 CglibMeipo

  1. package CGlib;
  2. import net.sf.cglib.proxy.Enhancer;
  3. import net.sf.cglib.proxy.MethodInterceptor;
  4. import net.sf.cglib.proxy.MethodProxy;
  5. import java.lang.reflect.Method;
  6. public class CglibMeipo implements MethodInterceptor {
  7. public Object getInstance(Class<?> clazz) throws Exception{
  8. Enhancer enhancer = new Enhancer();
  9. enhancer.setSuperclass(clazz);
  10. enhancer.setCallback(this);
  11. return enhancer.create();
  12. }
  13. private void before(){
  14. System.out.println("我是媒婆:我给你找对象,现在已经确认你的需求");
  15. System.out.println("开始物色");
  16. }
  17. private void after(){
  18. System.out.println("如果合适的话,就准备办事");
  19. }
  20. @Override
  21. public Object intercept( Object o, Method method, Object[] objects, MethodProxy methodProxy ) throws Throwable {
  22. before();
  23. Object obj = methodProxy.invokeSuper(o,objects);
  24. after();
  25. return obj;
  26. }
  27. }

2 CGLibTest

  1. package CGlib;
  2. import net.sf.cglib.core.DebuggingClassWriter;
  3. public class CGLibTest {
  4. public static void main(String[] args){
  5. try {
  6. System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,"E://cglib_proxy_class/");
  7. Customer obj = (Customer)new CglibMeipo().getInstance(Customer.class);
  8. obj.findLove();
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. }
  13. }

3 Customer

  1. package CGlib;
  2. public class Customer{
  3. public void findLove(){
  4. System.out.println("高富帅");
  5. System.out.println("身高180cm");
  6. System.out.println("有6块腹肌");
  7. }
  8. }

三 测试

  1. 我是媒婆:我给你找对象,现在已经确认你的需求
  2. 开始物色
  3. 高富帅
  4. 身高180cm
  5. 6块腹肌
  6. 如果合适的话,就准备办事

发表评论

表情:
评论列表 (有 0 条评论,552人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CGLIB动态代理

    一 说明 使用火车站卖票,使用CGLIB代理实现。 如果没有定义SellTickets接口,只定义了TrainStation(火车站类)。很显然JDK代理是无法使用了