真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

springcglib與jdk動態(tài)代理-創(chuàng)新互聯(lián)

1. 概述

在峨邊彝族等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供做網(wǎng)站、網(wǎng)站建設 網(wǎng)站設計制作定制開發(fā),公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,成都品牌網(wǎng)站建設,成都全網(wǎng)營銷推廣,成都外貿網(wǎng)站建設,峨邊彝族網(wǎng)站建設費用合理。

JDK動態(tài)代理是利用java反射機制 生成一個實現(xiàn)接口的匿名類, 在調用具體方法前調用InvocationHandler來處理

Cglib動態(tài)代理是 利用asm開源包 把被代理類的class文件加載進來 通過修改其字節(jié)碼生成子類來處理  

如果目標對象實現(xiàn)了接口 那么默認使用jdk代理(可以強制使用cglib代理)

如果沒有實現(xiàn)接口 必須使用cglib代理

強制使用cglib代理需要

  *引入cglibjar包

  *配置spring     

cglib因為是動態(tài)生成被代理類的子類 并覆蓋被代理類的方法 來實現(xiàn)的 所以 被代理方法不要使用final修飾   

2. 代碼示例

2.1 cglib代理類

package com.rocky.spring;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class CglibProxy {

  public static void main(String[] args) {
    final UserService service = new UserService();
    Enhancer hancer = new Enhancer();
    hancer.setSuperclass(service.getClass());
    hancer.setCallback(new MethodInterceptor(){

      @Override
      public Object intercept(Object proxy, Method method, Object[] arg2,
          MethodProxy arg3) throws Throwable {
        System.out.println("增強前 ... Cglib");
        Object invoke = method.invoke(service, arg2);
        System.out.println("增強后 ... Cglib");
        return invoke;
      }});
    UserService userService = (UserService) hancer.create();
    userService.sayHello();

  }
}
//需要引入cglib-2.2.jar 和org.objectweb.asm-3.3.1.jar 
//輸出
//增強前 ... Cglib
//this userService works....
//增強后 ... Cglib

網(wǎng)頁名稱:springcglib與jdk動態(tài)代理-創(chuàng)新互聯(lián)
當前URL:http://weahome.cn/article/dhoecp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部