日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

spring中的jdk动态代理(代码步骤)

發(fā)布時(shí)間:2025/3/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring中的jdk动态代理(代码步骤) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

UserDao.java接口:

package com.liu.jdk;public interface UserDao {public void addUser();public void deleteUser();}

UserDaoImpl.java實(shí)現(xiàn)類(lèi):

package com.liu.jdk;//目標(biāo)類(lèi) public class UserDaoImpl implements UserDao {@Overridepublic void addUser() {// TODO Auto-generated method stubSystem.out.println("添加方法");}@Overridepublic void deleteUser() {// TODO Auto-generated method stubSystem.out.println("刪除方法");}}

MyAspect.java切面類(lèi):

package com.liu.aspect; //切面類(lèi):可以存在多個(gè)通知advice(即增強(qiáng)方法) public class MyAspect {public void chek() {System.out.println("模擬檢查權(quán)限....");}public void log() {System.out.println("模擬記錄日志....");}}

jdkProxy.java代理類(lèi):

package com.liu.jdk;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;import com.liu.aspect.MyAspect;//jdk的代理類(lèi) public class jdkProxy implements InvocationHandler {//聲明目標(biāo)類(lèi)的接口private UserDao userDao;//創(chuàng)建代理的方法public Object create(UserDao userDao) {this.userDao = userDao;//1.加載類(lèi)加載器ClassLoader claasLoader = jdkProxy.class.getClassLoader();//2.被代理的對(duì)象實(shí)現(xiàn)所有的接口Class<?>[] clazz = userDao.getClass().getInterfaces();//3.使用代理類(lèi),進(jìn)行增強(qiáng) 返回后是代理的對(duì)象return Proxy.newProxyInstance(claasLoader, clazz, this);}//所有動(dòng)態(tài)代理類(lèi)的方法調(diào)用,都交給invoke()方法去處理//proxy 被代理后的對(duì)象//method 將要被執(zhí)行的方法信息(反射)//args 執(zhí)行方法時(shí)需要的參數(shù)@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// TODO Auto-generated method stub//聲明切面MyAspect myAspect = new MyAspect();//前增強(qiáng)myAspect.chek();//在目標(biāo)類(lèi)上調(diào)用方法 并傳入?yún)?shù)Object obj = method.invoke(userDao, args);//后增強(qiáng)myAspect.log();return obj;}}

JdkTest.java測(cè)試類(lèi):

package com.liu.jdk;import com.liu.aspect.MyAspect;public class JdkTest {public static void main(String[] args) {//創(chuàng)建代理對(duì)象jdkProxy jdk = new jdkProxy();//創(chuàng)建目標(biāo)對(duì)象UserDao userDao = new UserDaoImpl();//從代理對(duì)象中獲取增強(qiáng)后的目標(biāo)對(duì)象UserDao userDao1 = (UserDao) jdk.create(userDao);userDao1.addUser();userDao1.deleteUser();}}

運(yùn)行結(jié)果:

模擬檢查權(quán)限.... 增強(qiáng)方法 模擬記錄日志.... 模擬檢查權(quán)限.... 刪除方法 模擬記錄日志....

https://blog.csdn.net/weixin_45151960/article/details/104603603 CGLIB代理

總結(jié)

以上是生活随笔為你收集整理的spring中的jdk动态代理(代码步骤)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。