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

1. 概述

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

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

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

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

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

強制使用cglib代理需要

  *引入cglibjar包

  *配置spring <aop:aspectj-autoproxy proxy-target-class="true"/>    

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)站標(biāo)題:springcglib與jdk動態(tài)代理-創(chuàng)新互聯(lián)
路徑分享:http://www.muchs.cn/article28/dhoecp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、軟件開發(fā)、定制網(wǎng)站、關(guān)鍵詞優(yōu)化、企業(yè)建站、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名