spring中的jdk动态代理(代码步骤)
生活随笔
收集整理的這篇文章主要介紹了
spring中的jdk动态代理(代码步骤)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
UserDao.java接口:
package com.liu.jdk;public interface UserDao {public void addUser();public void deleteUser();}UserDaoImpl.java實現(xiàn)類:
package com.liu.jdk;//目標類 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切面類:
package com.liu.aspect; //切面類:可以存在多個通知advice(即增強方法) public class MyAspect {public void chek() {System.out.println("模擬檢查權限....");}public void log() {System.out.println("模擬記錄日志....");}}jdkProxy.java代理類:
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的代理類 public class jdkProxy implements InvocationHandler {//聲明目標類的接口private UserDao userDao;//創(chuàng)建代理的方法public Object create(UserDao userDao) {this.userDao = userDao;//1.加載類加載器ClassLoader claasLoader = jdkProxy.class.getClassLoader();//2.被代理的對象實現(xiàn)所有的接口Class<?>[] clazz = userDao.getClass().getInterfaces();//3.使用代理類,進行增強 返回后是代理的對象return Proxy.newProxyInstance(claasLoader, clazz, this);}//所有動態(tài)代理類的方法調用,都交給invoke()方法去處理//proxy 被代理后的對象//method 將要被執(zhí)行的方法信息(反射)//args 執(zhí)行方法時需要的參數(shù)@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// TODO Auto-generated method stub//聲明切面MyAspect myAspect = new MyAspect();//前增強myAspect.chek();//在目標類上調用方法 并傳入?yún)?shù)Object obj = method.invoke(userDao, args);//后增強myAspect.log();return obj;}}JdkTest.java測試類:
package com.liu.jdk;import com.liu.aspect.MyAspect;public class JdkTest {public static void main(String[] args) {//創(chuàng)建代理對象jdkProxy jdk = new jdkProxy();//創(chuàng)建目標對象UserDao userDao = new UserDaoImpl();//從代理對象中獲取增強后的目標對象UserDao userDao1 = (UserDao) jdk.create(userDao);userDao1.addUser();userDao1.deleteUser();}}運行結果:
模擬檢查權限.... 增強方法 模擬記錄日志.... 模擬檢查權限.... 刪除方法 模擬記錄日志....https://blog.csdn.net/weixin_45151960/article/details/104603603 CGLIB代理
總結
以上是生活随笔為你收集整理的spring中的jdk动态代理(代码步骤)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql 存储引擎有哪些以及MyISA
- 下一篇: spring中的CGLIB动态代理(代码