Java动态代理之cglib
生活随笔
收集整理的這篇文章主要介紹了
Java动态代理之cglib
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)載自?Java動態(tài)代理之cglib
?
cglib是對jdk動態(tài)代理的補充,彌補了因沒有接口的類生成代理類的缺失。?
下面通過簡單的例子學(xué)習(xí)一下cglib的使用,當(dāng)然,要是用需要第三方的jar包,jar包自行下載。
業(yè)務(wù)類
public class BankService {public void save(){System.out.println("存錢...");} }業(yè)務(wù)增強類
public class ServiceEnhancer {public static void before(){System.out.println("檢查錢是否完整無存");}public static void after(){System.out.println("如果有錯,就回滾");} } 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 implements MethodInterceptor{private Enhancer enhancer = new Enhancer();public Object getProxy(Class<?> clazz){//設(shè)置 需要創(chuàng)建子類的類enhancer.setSuperclass(clazz);enhancer.setCallback(this);return enhancer.create();//通過字節(jié)碼技術(shù)創(chuàng)建子類實例}@Overridepublic Object intercept(Object obj, //目標(biāo)類實例Method method, //目標(biāo)類方法的反射對象Object[] args, //方法的動態(tài)入?yún)ethodProxy proxy //代理類實例) throws Throwable {ServiceEnhancer.before();Object result = proxy.invokeSuper(obj, args);ServiceEnhancer.after();return result;}} public class CglibDemo {public static void main(String[] args) {CglibProxy proxy = new CglibProxy();BankService bankservice = (BankService) proxy.getProxy(BankService.class);bankservice.save();//com.proxy.cglib.BankService$$EnhancerByCGLIB$$82923c9a@2e5d6d97//System.out.println(bankservice);} }?
總結(jié)
以上是生活随笔為你收集整理的Java动态代理之cglib的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 市场环境已不同于往日 姗姗来迟的小米汽车
- 下一篇: iPhone奇葩手机壳现身 秒变华为新旗